国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

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

2019-10-23 18:31:21
字體:
來源:轉載
供稿:網友

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

有些時候我們使用Service的時需要采用隱私啟動的方式,但是Android 5.0一出來后,其中有個特性就是Service Intent  must be explitict,也就是說從Lollipop開始,service服務必須采用顯示方式啟動。

而android源碼是這樣寫的(源碼位置: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));   }  } }

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

1、設置Action和packageName:

參考代碼如下:

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

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

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

2、將隱式啟動轉換為顯示啟動:--參考地址: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; }

調用方式如下:

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

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


注:相關教程知識閱讀請移步到Android開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 呼伦贝尔市| 建平县| 托克托县| 葫芦岛市| 深水埗区| 西安市| 长寿区| 浦东新区| 南部县| 巨鹿县| 浮梁县| 陆川县| 谷城县| 英德市| 余庆县| 吉首市| 大余县| 新河县| 东阿县| 黔东| 竹山县| 崇礼县| 偃师市| 大埔县| 石棉县| 平遥县| 化德县| 东丽区| 喀喇| 托里县| 永清县| 惠来县| 海盐县| 江源县| 额敏县| 新余市| 南昌县| 乐陵市| 诸城市| 金门县| 陈巴尔虎旗|