如何可靠地确定用户的通话或短信能力

时间:2013-10-22 08:05:06

标签: android telephony

在android上检测电话模块存在的文档化方法是检查FEATURE_TELEPHONY功能。不幸的是,在某些智能手机和模拟器上,即使手机存在,检查也会返回false。所以这不是一种可靠的方式,因为它会产生假阴性。

我找到了一种获取电话管理器(TelephonyManager tm=(TelephonyManager )this.getSystemService(Context.TELEPHONY_SERVICE);的方法,但它至少在Nexus 7平板电脑上给出了误报。

我的目标是隐藏与我的小部件中的电话和短信发送相关的选项,如果无法拨打这些电话或短信。

在Android 2.2及更高版本中是否存在解决我的任务的可靠方法?

3 个答案:

答案 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。