/文章

Android中判断Service是否启动了

文章目录

前言

偶然需要使用,记录于此。

好记性不如烂笔头

正文

使用getRunningServices获取运行的服务

有时候需要盘服务是否启动,如果没有启动就需要拉起来

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<ActivityManager.RunningServiceInfo> runningService = (ArrayList<ActivityManager.RunningServiceInfo>) 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的设备上测试。

  1. 系统应用 :可以获取运行的Service
  2. 非系统应用 :无法获取运行的Service

getRunningServices()说明废弃了,同时也说明,Android O后不在提供给第三方应用。

参考文章

  1. Android中判断服务是否开启

猜你喜欢

前言 最近因为一个紧急的项目,客户要求摘他另外一个客户的样机,为了赶进度,我们通过反编译样机中的应用,获取UI和布局等。 但,做出来后,效果总感觉有些不一样,比如显示的字体大小。 最后发现,我们调试的样机分辨率虽然跟样机一样,但密度不一样。…
发表评论