0

我有一個功能,在一個意圖中使用tel:// URI,這將啓動手機應用程序,並給出使用內置手機的選擇,因此對於沒有手機信號的設備我把條件檢查android.hardware.telephony可以將其添加到設備

if(pm.hasSystemFeature("android.hardware.telephony"))其中pm是PackageManager對象。

儘管能夠根據清單權限安裝應用程序,但如果這種情況不存在,某些設備將會崩潰。

但也有VOIP應用程序將採取tel://意圖,但實際上不使用電話硬件。

有沒有一種方法可以檢查用戶的設備是否有可以使用tel URI的東西,而不是檢查它們具有哪些硬件功能?

回答

1

您可以檢查系統是否擁有能夠接收像這樣的意圖的任何活動:

private void tryOpenDialer(String phoneNumber) { 
    if (TextUtils.isEmpty(phoneNumber)) { 
     // invalid input - return or throw IllegalArgumentException 
     return; 
    } 
    Intent intent = new Intent(Intent.ACTION_DIAL, Uri.parse("tel:" + phoneNumber)); 
    PackageManager pkgManager = getPackageManager(); 
    List<ResolveInfo> activities = pkgManager.queryIntentActivities(intent, 0); 
    if (activities.size() > 0) { 
     context.startActivity(intent) 
    } else { 
     // if you want, pop up a toast or dialog telling the user there is 
     // nothing on the device to handle this action 
    } 
} 
+0

我看,並配有內置的手機應用程序也將到該查詢正確應對所有設備? – CQM

+0

如果設備上有任何可以解析意圖的活動,它應該觸及'context.startActivity(intent)'行。內置的手機應用程序可以做到這一點,但其他應用程序也可以做到這一點(例如,用戶可以使用Play商店中的撥號程序取代其撥號程序)。基本上,您可以避免調用startActivity,直到您確定設備上還有其他應用程序能夠接收它。 – Karakuri

相關問題