在android上检测电话模块存在的文档化方法是检查FEATURE_TELEPHONY功能。不幸的是,在某些智能手机和模拟器上,即使手机存在,检查也会返回false。所以这不是一种可靠的方式,因为它会产生假阴性。
我找到了一种获取电话管理器(TelephonyManager tm=(TelephonyManager )this.getSystemService(Context.TELEPHONY_SERVICE);
的方法,但它至少在Nexus 7平板电脑上给出了误报。
我的目标是隐藏与我的小部件中的电话和短信发送相关的选项,如果无法拨打这些电话或短信。
在Android 2.2及更高版本中是否存在解决我的任务的可靠方法?
答案 0 :(得分:1)
(TelephonyManager tm=(TelephonyManager )this.getSystemService(Context.TELEPHONY_SERVICE);
我不知道为什么上面的代码会返回误报,但为什么不用电话管理器检查其网络类型或网络运营商?例如,它可能会返回nexus 7的NETWORK_TYPE_UNKNOWN标志。
return (android.telephony.TelephonyManager.getNetworkType()
!= android.telephony.TelephonyManager.NETWORK_TYPE_UNKNOWN)
Refernce:
答案 1 :(得分:1)
我使用Intent分辨率执行此操作,如下所示:
// Prepare the intent.
theIntent = new Intent(Intent.ACTION_DIAL, Uri.parse("tel:3334444"));
// Resolve the activity for the desired intent.
theResolveInfo = thePM.resolveActivity(theIntent,
PackageManager.MATCH_DEFAULT_ONLY);
在Nexus 7上进行正确测试表明呼叫能力不存在。
在Genymotion模拟器上测试表明存在呼叫能力。
尚未测试其他设备。
答案 2 :(得分:0)
在考虑之后,我认为确定该设备是否能够发送短信就足够了。
您可以在我的回答中使用SMSSender:Send SMS until it is successful
然后发送和短信到一些预定义的号码,只要你不使用任何现有号码并打扰一个随机的人,这个数字并不重要:P'
最后注册SENT广播。
如果发送了短信,那么设备具有无线电功能,否则没有,所以如果发送短信,只需打开这些选项。
我知道,如果设备出于某种原因在执行此检查时处于离线状态,那么它会认为它无法拨打电话或发送短信。
只是给你另一个选项而不是TelephonyManager。