我有一个在意图中使用tel://
URI的功能,这会启动手机应用程序并且还可以选择使用内置手机,因此对于没有手机信号的设备,我处于检查状态
if(pm.hasSystemFeature("android.hardware.telephony"))
其中pm
是PackageManager对象。
如果不存在这种情况,有些设备会崩溃,尽管能够根据清单权限安装应用程序。
但是也有VOIP应用会采用tel://
意图,但实际上并没有使用电话硬件。
有没有办法可以检查用户的设备是否有可以使用tel URI而不是检查它们具有哪些硬件功能?
答案 0 :(得分: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
}
}