Android5.0隐式启动服务

来源:互联网 发布:python学多久 编辑:程序博客网 时间:2024/06/05 05:41

Android5.0隐式启动服务

在Android 5.0中系统禁止我们通过隐式意图启动service,如果通过隐式意图启动会报异常,所以需要通过显式意图启动service,如果要被启动的服务在本应用中,还可以通过显式意图启动,但是如果是要启动其他应用的service,那么如何通过显式意图来启动呢?下面介绍一个方法用于通过显示意图启动其他应用中的service

public static Intent getExplicitIntent(Context context, Intent implicitIntent) {        PackageManager pm = context.getPackageManager();        // 返回给定条件的所有ResolveInfo对象(本质上是Service)        List<ResolveInfo> resolveInfo = pm.queryIntentServices(implicitIntent, 0);        // 确保只有一个service匹配        if (resolveInfo == null || resolveInfo.size() != 1) {            return null;        }        //获取component信息并创建ComponentName        ResolveInfo serviceInfo = resolveInfo.get(0);        //获取Service所在的包名        String packageName = serviceInfo.serviceInfo.packageName;        //获取Service的名称        String className = serviceInfo.serviceInfo.name;        // 通过包名和service的类名创建component        //ComponentName用于指定打开其他应用的activity和service        ComponentName component = new ComponentName(packageName, className);        // 创建新的intent        Intent explicitIntent = new Intent(implicitIntent);        // 为intent设置指定的组件        explicitIntent.setComponent(component);        return explicitIntent;    }

通过该方法可以实现显式意图启动其他应用中的service

0 0