前言
偶然需要使用,记录于此。
好记性不如烂笔头
正文
有时候需要盘服务是否启动,如果没有启动就需要拉起来
PS:SERVICE_PACKAGENAME和SERVICE_NAME分别是定义的包名和服务包名,这里省略。
/**
* start service
*/
private void startService() {
try {
if (!isServiceRunning(SERVICE_NAME)) {
Intent intent = new Intent();
intent.setComponent(new ComponentName(SERVICE_PACKAGENAME, SERVICE_NAME));
startService(intent);
}
} catch (Exception e) {
e.printStackTrace();
}
return;
}
/**
* @param serviceName
* @return
*/
@SuppressWarnings("deprecation")
public boolean isServiceRunning(String serviceName) {
try {
if (TextUtils.isEmpty(serviceName)) {
return false;
}
ActivityManager myManager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
ArrayList runningService = (ArrayList) myManager.getRunningServices(Integer.MAX_VALUE);
for (int i = 0; i < runningService.size(); i++) {
if (runningService.get(i).service.getClassName().toString()
.equals(serviceName)) {
return true;
}
}
} catch (Exception e) {
e.printStackTrace();
}
return false;
}
注意事项
在实际测试中,Android 9.0的设备上测试。
系统应用 :可以获取运行的Service
非系统应用 :无法获取运行的Service
getRunningServices()说明废弃了,同时也说明,Android O后不在提供给第三方应用。
参考文章