android 启动不了别的app的服务,Android跨应用启动Service
ServiceService是一个后台运行的组件,执行长时间运行且不需要用户交互的任务,即使应用被销毁也依然可以工作。App1App1中定义了Service:Service定义App2要在App2中启动App1的服务,这里在App2的界面中定义了两个按钮(启动服务和停止服务),分别控制App1中Service的启动和停止。需要启动Service时,首先定义一个Intent,通过显示Intent的方
Service
Service是一个后台运行的组件,执行长时间运行且不需要用户交互的任务,即使应用被销毁也依然可以工作。
App1
App1中定义了Service:
Service定义
App2
要在App2中启动App1的服务,这里在App2的界面中定义了两个按钮(启动服务和停止服务),分别控制App1中Service的启动和停止。
需要启动Service时,首先定义一个Intent,通过显示Intent的方式启动,具体如下:Intent serviceIntent = new Intent();
//这里ComponentName的第一个参数为App1所在的Package,即前面代码中提到的package com.example.startservicefromanotherapp,第二个参数为Service所在的类名,可以使用绝对路径来指出(com.example.startservicefromanotherapp.AppService)。
serviceIntent.setComponent(new ComponentName("com.example.startservicefromanotherapp", "com.example.startservicefromanotherapp.AppService"));
接着在需要启动Service的地方启动Service即可。
有一点值得注意:
在Android8.0以后的版本中直接使用startService()启动服务会出错,因为Android8.0不再允许后台service直接通过startService的方式启动,该方法会引发IllegalStateException错误,新的 Context.startForegroundService() 函数将启动一个前台服务,但即使在后台运行,系统也允许调用Context.startForegroundService() ,但应用必须在创建服务后的5s内调用该服务的 startForeground() 方法。
因此可以对代码进行如下处理即可:
写在最后:文章是在学习过程中做的学习笔记,同时与志同道合者分享,文章内容均经过我自己实验证实可行,如有问题欢迎留言,很高兴一起交流讨论,共同进步!
更多推荐
所有评论(0)