前幾天正好看到《阿裡巴巴 Android 開發手冊》中提到的: “Activity 間通過隱式 Intent 的跳轉,在發出 Intent 之前必須通過 resolveActivity 檢查,避免找不到合適的調用組件,造成 ActivityNotFoundException 的異常” 今天就在一臺聯 ...
前幾天正好看到《阿裡巴巴 Android 開發手冊》中提到的:
“Activity 間通過隱式 Intent 的跳轉,在發出 Intent 之前必須通過 resolveActivity 檢查,避免找不到合適的調用組件,造成 ActivityNotFoundException 的異常”
今天就在一臺聯想的平板上彈了好幾個崩潰,查找之後發現是通過 Intent 跳轉到撥號和瀏覽器的時候就會崩潰
原因分析:平板上沒有安裝撥號軟體和瀏覽器,導致找不到調用組件,直接崩潰;話不多說立馬在 APP 內搜 Action 為 Intent.ACTION_VIEW 等通過隱式跳轉的地方,測試了下的確是直接崩潰了;從沒考慮過相容平板,都是用的手機,所以一直沒發現這個問題;現在加上檢查之後雖然不會跳轉,但起碼不會崩潰了,畢竟不符合條件的設備目前不是很多
所有隱式的 startActivity 一律調用下麵的方法檢查:
1 /** 2 * Activity 間通過隱式 Intent 的跳轉,在發出 Intent 之前必須通過 resolveActivity 檢查, 3 * 避免找不到合適的調用組件,造成 ActivityNotFoundException 的異常 4 * @param context 5 * @param intent 6 */ 7 public static void startActivityCheckIntent(Context context, Intent intent) { 8 if (intent == null) { 9 return; 10 } 11 12 if (context.getPackageManager().resolveActivity(intent, PackageManager.MATCH_DEFAULT_ONLY) != null) { 13 try { 14 context.startActivity(intent); 15 } catch (ActivityNotFoundException e) { 16 LogUtil.e(e.toString()); 17 } 18 } 19 }
錯誤寫法:
1 Intent intent = new Intent(); 2 intent.setAction("com.great.activity_intent.Intent_Demo1_Result3"); 3 startActivity(intent);