最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Android 出現(xiàn)的警告(Service Intent must be explicit)解決辦法詳解

 更新時(shí)間:2017年04月14日 14:24:59   作者:vrix  
這篇文章主要介紹了Android 出現(xiàn)的警告(Service Intent must be explicit)解決辦法詳解的相關(guān)資料,需要的朋友可以參考下

Android 出現(xiàn)的警告(Service Intent must be explicit)解決辦法詳解

有些時(shí)候我們使用Service的時(shí)需要采用隱私啟動(dòng)的方式,但是Android 5.0一出來(lái)后,其中有個(gè)特性就是Service Intent  must be explitict,也就是說(shuō)從Lollipop開(kāi)始,service服務(wù)必須采用顯示方式啟動(dòng)。

而android源碼是這樣寫(xiě)的(源碼位置:sdk/sources/android-21/android/app/ContextImpl.java):

private void validateServiceIntent(Intent service) {
  if (service.getComponent() == null && service.getPackage() == null) {
   if (getApplicationInfo().targetSdkVersion >= Build.VERSION_CODES.LOLLIPOP) {
    IllegalArgumentException ex = new IllegalArgumentException(
      "Service Intent must be explicit: " + service);
    throw ex;
   } else {
    Log.w(TAG, "Implicit intents with startService are not safe: " + service
      + " " + Debug.getCallers(2, 3));
   }
  }
 }

既然,源碼里是這樣寫(xiě)的,那么這里有兩種解決方法:

1、設(shè)置Action和packageName:

參考代碼如下:

Intent mIntent = new Intent();
mIntent.setAction("XXX.XXX.XXX");//你定義的service的action
mIntent.setPackage(getPackageName());//這里你需要設(shè)置你應(yīng)用的包名
context.startService(mIntent);

此方式是google官方推薦使用的解決方法。

在此附上地址供大家參考:http://developer.android.com/goo ... tml#billing-service,有興趣的可以去看看。

2、將隱式啟動(dòng)轉(zhuǎn)換為顯示啟動(dòng):--參考地址:http://stackoverflow.com/a/26318757/1446466

public static Intent getExplicitIntent(Context context, Intent implicitIntent) {
  // Retrieve all services that can match the given intent
  PackageManager pm = context.getPackageManager();
  List<ResolveInfo> resolveInfo = pm.queryIntentServices(implicitIntent, 0);
  // Make sure only one match was found
  if (resolveInfo == null || resolveInfo.size() != 1) {
   return null;
  }
  // Get component info and create ComponentName
  ResolveInfo serviceInfo = resolveInfo.get(0);
  String packageName = serviceInfo.serviceInfo.packageName;
  String className = serviceInfo.serviceInfo.name;
  ComponentName component = new ComponentName(packageName, className);
  // Create a new intent. Use the old one for extras and such reuse
  Intent explicitIntent = new Intent(implicitIntent);
  // Set the component to be explicit
  explicitIntent.setComponent(component);
  return explicitIntent;
 }

調(diào)用方式如下:

Intent mIntent = new Intent();
mIntent.setAction("XXX.XXX.XXX");
Intent eintent = new Intent(getExplicitIntent(mContext,mIntent));
context.startService(eintent);

感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!

相關(guān)文章

最新評(píng)論

牙克石市| 陆河县| 峡江县| 襄汾县| 朝阳县| 大关县| 江口县| 广水市| 曲阳县| 虞城县| 安顺市| 靖远县| 达日县| 手游| 萍乡市| 吴江市| 安阳市| 独山县| 清水县| 汉源县| 略阳县| 南宫市| 奈曼旗| 靖宇县| 永修县| 河间市| 新乐市| 天气| 临夏县| 邛崃市| 安岳县| 莒南县| 宿迁市| 南江县| 吐鲁番市| 桓仁| 博白县| 靖远县| 古田县| 信阳市| 那曲县|