Android Service全屏广播

简介: 场景 产品需要一个全屏广播,不管用户在那个界面每隔一段时间都会弹出一个滚动的文字,而且这个不是用推送来做的,后台返回一组数据,然后客户端自己进行处理!如果有更好的方法或者建议都可以跟我说一下,万分感谢,第一次做这个也不知道用什么合适!

场景


       产品需要一个全屏广播,不管用户在那个界面每隔一段时间都会弹出一个滚动的文字,而且这个不是用推送来做的,后台返回一组数据,然后客户端自己进行处理!如果有更好的方法或者建议都可以跟我说一下,万分感谢,第一次做这个也不知道用什么合适!


Service实现


import android.app.Service;
import android.content.Context;
import android.content.Intent;
import android.os.IBinder;
import android.view.WindowManager;
import android.widget.LinearLayout;
import com.yudaowawa.ydww.bean.GetDollInvoicesResult;
import com.yudaowawa.ydww.util.OtherUtils;
import java.util.ArrayList;
import weking.lib.utils.LogUtils;
import weking.lib.utils.MyToast;
/**
 * 中奖轮播
 */
public class WinningCarouselService extends Service
{
   private static int time=1*5;
   public static Thread thread;
   public static void setTime(int te) 
   {
      time = te;
   }
   private static  ArrayList<GetDollInvoicesResult.ItemsBean> mDatas;
   private WindowManager.LayoutParams mParams;
   private Context context;
   private int height;
   private LinearLayout ll;
   public WinningCarouselService(){
   }
   @Override
   public IBinder onBind(Intent intent) 
   {
      return null;
   }
   @Override
   public void onCreate() 
   {
      super.onCreate();
      context=this;
      thread = new Thread(new Tick());
      thread.start();
   }
   @Override
   public int onStartCommand(Intent intent, int flags, int startId) 
   {
      return super.onStartCommand(intent, flags, startId);
   }
   @Override
   public void onDestroy() 
   {
      super.onDestroy();
   }
   class Tick implements Runnable  
   {  
       public void run()  
       {  
          try {
              while(time > -1)  
              {
                Thread.sleep(1000);
                time--;
                 if(time<=0)
                 {
                  if(mDatas!=null){
                     int size = mDatas.size();
                     if(size>0)
                     {
                        if(OtherUtils.isAppOnForeground())
                        {
                           int pos = size-1;
                           MyToast.showMyToast(String.valueOf(mDatas.get(pos).getNickname()+"抓中了娃娃"),mDatas.get(pos).getHeadPic());
                           LogUtils.e("WinningCarouselService number"+mDatas.get(pos));
                           mDatas.remove(pos);
                        }
                     }
                  }
                  time=1*5;
               }
               LogUtils.e("WinningCarouselService time"+time);
              }  
         } catch (Exception e) {
            e.printStackTrace();
            LogUtils.e("WinningCarouselService InterruptedException");
         }
       }  
   }
   public static void stop() 
   {  
        if (thread != null) 
        {  
           thread.interrupt();  
           thread = null;  
        }  
    }
   public static void setDatas(GetDollInvoicesResult result) {
      mDatas= (ArrayList<GetDollInvoicesResult.ItemsBean>) result.getItems();
   }
}


在Service修改UI界面  


public static void showMyToast(final String str, final String headUrl) {
    if (!OtherUtils.isAppOnForeground()) {
        return;
    }
    try {
        App.getAppContext().getCurrentActivity().runOnUiThread(new Runnable() {
            @Override
            public void run() {
                LayoutInflater inflater = LayoutInflater.from(App.getAppContext());
                adLayoutView = inflater.inflate(R.layout.layout_toast_ad, null);
                adTextView = (TextView) adLayoutView.findViewById(R.id.tv_toast);
                adIvHeadView = (CircleImageView) adLayoutView.findViewById(R.id.iv_head_icon);
                adTextView.setText(str);
                ImageUtil.setRoundImgView(adIvHeadView, C.BASE_ICON_URL + headUrl, R.mipmap.home_ic_title_right);
                if (adToast != null) {
                    adToast.setView(adLayoutView);
                } else {
                    adToast = new Toast(App.getAppContext());
                    adToast.setView(adLayoutView);
                }
                adToast.setGravity(Gravity./*CENTER*/TOP, 0, DisplayUtil.dip2px(App.getAppContext(), 60));
                adToast.setDuration(Toast.LENGTH_SHORT);
                adToast.show();
            }
        });
    } catch (Exception e) {
    }
}




相关文章
|
10月前
|
Android开发
Android 11 添加Service服务SELinux问题
Android 11 添加Service服务SELinux问题
470 1
|
10月前
|
Android开发
Android基础知识:请解释Service是什么,它与IntentService的区别是什么?
Android基础知识:请解释Service是什么,它与IntentService的区别是什么?
143 0
|
Android开发
Android 全屏适配刘海机型
Android 全屏适配刘海机型
215 0
|
10月前
|
XML Java Android开发
Android Studio App开发之服务Service的讲解及实战(包括启动和停止,绑定与解绑,推送服务到前台实现音乐播放器,附源码)
Android Studio App开发之服务Service的讲解及实战(包括启动和停止,绑定与解绑,推送服务到前台实现音乐播放器,附源码)
1124 0
|
7月前
|
Android开发 开发者
Android中弹框如何设计成全屏的
本文介绍在Android中实现全屏对话框的方法,包括使用`Dialog`和`DialogFragment`两种方式。通过设置对话框无标题、调整布局参数及使用透明背景实现全屏效果。适用于希望提升应用交互体验的开发者。
119 0
|
9月前
|
调度 Android开发
43. 【Android教程】服务:Service
43. 【Android教程】服务:Service
74 2
|
10月前
|
Android开发
Android Service Call /dev/xxx SELinux
Android Service Call /dev/xxx SELinux
151 1
|
7月前
|
编解码 网络协议 Android开发
Android平台GB28181设备接入模块实现后台service按需回传摄像头数据到国标平台侧
我们在做Android平台GB28181设备对接模块的时候,遇到这样的技术需求,开发者希望能以后台服务的形式运行程序,国标平台侧没有视频回传请求的时候,仅保持信令链接,有发起视频回传请求或语音广播时,打开摄像头,并实时回传音视频数据或接收处理国标平台侧发过来的语音广播数据。
|
10月前
|
存储 监控 Java
Android Service之设备存储空间监控 DeviceStorageMonitorService
Android Service之设备存储空间监控 DeviceStorageMonitorService
178 2
|
10月前
|
Android开发 数据库管理
Android如何在Activity和Service之间传递数据
Android如何在Activity和Service之间传递数据
345 3

热门文章

最新文章

  • 1
    【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
  • 2
    Android历史版本与APK文件结构
  • 3
    【01】噩梦终结flutter配安卓android鸿蒙harmonyOS 以及next调试环境配鸿蒙和ios真机调试环境-flutter项目安卓环境配置-gradle-agp-ndkVersion模拟器运行真机测试环境-本地环境搭建-如何快速搭建android本地运行环境-优雅草卓伊凡-很多人在这步就被难倒了
  • 4
    当flutter react native 等混开框架-并且用vscode-idea等编译器无法打包apk,打包安卓不成功怎么办-直接用android studio如何打包安卓apk -重要-优雅草卓伊凡
  • 5
    APP-国内主流安卓商店-应用市场-鸿蒙商店上架之必备前提·全国公安安全信息评估报告如何申请-需要安全评估报告的资料是哪些-优雅草卓伊凡全程操作
  • 6
    【03】仿站技术之python技术,看完学会再也不用去购买收费工具了-修改整体页面做好安卓下载发给客户-并且开始提交网站公安备案-作为APP下载落地页文娱产品一定要备案-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
  • 7
    【09】flutter首页进行了完善-采用android studio 进行真机调试开发-增加了直播间列表和短视频人物列表-增加了用户中心-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
  • 8
    【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
  • 9
    Cellebrite UFED 4PC 7.71 (Windows) - Android 和 iOS 移动设备取证软件
  • 10
    escrcpy:【技术党必看】Android开发,Escrcpy 让你无线投屏新体验!图形界面掌控 Android,30-120fps 超流畅!🔥