android 解決5.0以上不支持隱式啟動服務


android 5.0以上不支持隱式啟動服務,有常用的兩種解決辦法。

1 將隱式啟動轉換為顯式啟動,兼容編譯sdk5.0以后版本

示例調用:

      		context.bindService(getExplicitIntent(mContext,new Intent(GPSBOARDCONTROL)),
       				serviceConnection, Context.BIND_AUTO_CREATE);

轉換代碼

    //將隱式啟動轉換為顯式啟動,兼容編譯sdk5.0以后版本
    public Intent getExplicitIntent(Context context,Intent implicitIntent){
        PackageManager pm = context.getPackageManager();
        List<ResolveInfo> resolveInfos = pm.queryIntentServices(implicitIntent, 0);
        if (resolveInfos == null || resolveInfos.size()!= 1) {
            return null;
        }
        Intent explicitIntent = null;
        ResolveInfo info = resolveInfos.get(0);
        String packageName = info.serviceInfo.packageName;
        String className = info.serviceInfo.name;
        ComponentName component = new ComponentName(packageName,className);
        explicitIntent = new Intent(implicitIntent);
        explicitIntent.setComponent(component);
        return explicitIntent;
    }

2 直接寫上包名以及標志

            Intent intent = new Intent("com.gnss.GNSSService");
            intent.setAction(GPSBOARDCONTROL);//Service能夠匹配的Action
            intent.setPackage("com.gnss.ssserver");//應用的包名
            context.bindService(intent,serviceConnection, Context.BIND_AUTO_CREATE);

3 判斷應用是否安裝

    //判斷應用是否安裝
    public boolean isAppInstalled(Context context, String packageName) {  
        final PackageManager packageManager = context.getPackageManager();  
        List<PackageInfo> pinfo = packageManager.getInstalledPackages(0);  
        if (pinfo != null) {  
            for (int i = 0; i < pinfo.size(); i++) {  
                if (pinfo.get(i).packageName.contains(packageName)) {
                    return true;
                }
            }  
        }  
        return false;  
    } 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM