博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
安卓开机启动服务,并且等服务起来再发送消息给该服务
阅读量:6828 次
发布时间:2019-06-26

本文共 1827 字,大约阅读时间需要 6 分钟。

hot3.png

public class BootBroadcastReceiver extends BroadcastReceiver{

      private static final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);

      final String className = "com.example.notify.GameService";

      @Override

      public void onReceive(Context context, Intent intent) {

            ConnectivityManager manager = (ConnectivityManager) context

                        .getSystemService(Context. CONNECTIVITY_SERVICE);

            NetworkInfo gprs = manager

                        .getNetworkInfo(ConnectivityManager. TYPE_MOBILE);

            NetworkInfo wifi = manager

                        .getNetworkInfo(ConnectivityManager. TYPE_WIFI);

             if (!gprs.isConnected() && !wifi.isConnected()) { //网络没开

                   // network closed

            } else { //如果检测到有网络就发送请求确认通知时间

                  Log. e("开机自动服务检测到网络" , "开机自动服务自动启动....." );

                  sendMsg(context);

            }

      }      

      private void sendMsg(Context context) {

             //后边的XXX.class就是要启动的服务

        Intent service = new Intent(context,GameService. class); 

        context.startService(service);

        //sentHttp();

        //beepForAnHour();

        ActivityManager mActivityManager = (ActivityManager)context.getSystemService(Context.ACTIVITY_SERVICE);       

        while(true){//等待服务启动后开始发送广播

             if(waitService(mActivityManager)){

                   break;

            }

             try {

                        Thread. sleep(1000);

                  } catch (InterruptedException e) {

                        e.printStackTrace();

                  }

        }

        //启动之后再等1秒,必须保证比 creat迟才行

        try {

                  Thread. sleep(1000);

            } catch (InterruptedException e) {

                  e.printStackTrace();

            }

        //发起另一个通知给监听该消息的监听器,前提是处理该消息的服务需要已经启动

        Intent ntf = new Intent( "com.skymobile.empresses.NTF");

        context.sendBroadcast(ntf);

        Log.e("开机自动服务sendMsg" , "开机自动服务自动启动....." );

      }

      private boolean waitService(ActivityManager mActivityManager) {

            List<RunningServiceInfo> mServiceList = mActivityManager.getRunningServices(40);

             forint i = 0; i < mServiceList.size(); i ++){

                   if( className.equals(mServiceList.get(i). service.getClassName())){

                        Log. e("开机自动服务waitService" , "服务启动" );

                         return true;

                  }

            }

             return false;

      }

}

转载于:https://my.oschina.net/ffse54s/blog/783250

你可能感兴趣的文章
cast——java类型转换
查看>>
linux 切换c++版本
查看>>
静态方法和实例方法联系与区别
查看>>
java 正则获取html的值
查看>>
NOI2015
查看>>
Eclipse导入别人项目爆红叉
查看>>
JVM(四、尝试编写类加载器)
查看>>
Extjs 4.2使用心得 --- store和reader使用技巧
查看>>
文本框 只能输入数字和小数点验证
查看>>
HIbernate学习笔记(八) hibernate缓存机制
查看>>
struts2从浅至深(三)拦截器
查看>>
Eclipse 项目run时 Console控制台输出中文乱码问题的解决方法
查看>>
Alpha冲刺随笔集
查看>>
小米6.0运行时权限填坑
查看>>
opencv(8)直方图操作
查看>>
JDBC 操作数据库实例
查看>>
P-残缺的棋盘
查看>>
HDU-2068 RPG的错排(组合, 错排)
查看>>
Windows ForFiles 删除 过期 文件
查看>>
bzoj1706
查看>>