1

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

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

我的目标是从我的小部件中隐藏与电话和短信发送相关的选项,如果这些电话或短信发送是不可能的。

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

4

3 回答 3

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)

参考:

于 2013-10-22T08:45:47.177 回答
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 模拟器上的测试表明存在调用能力。

尚未测试其他设备。

于 2014-10-17T11:36:22.587 回答
0

经过一番思考,我认为确定设备是否能够发送短信就足够了。

您可以使用我的回答中的 SMSSender:发送 SMS 直到成功

然后向某个预定义的号码发送短信,只要您不使用任何现有号码并打扰一个随机的人,该号码是什么并不重要:P'

最后注册 SENT 广播。

如果发送 SMS,则设备具有无线电功能,否则没有,因此如果发送消息,只需打开这些选项。

不过,我知道,如果设备在执行此检查时由于某种原因处于脱机状态,那么它会认为它无法拨打电话或发送短信。

只是为您提供除 TelephonyManager 之外的另一种选择。

于 2013-10-22T11:17:30.940 回答