代码之家  ›  专栏  ›  技术社区  ›  Eugene Mayevski 'Callback

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

  •  1
  • Eugene Mayevski 'Callback  · 技术社区  · 11 年前

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

    我找到了一种获得电话经理的方法 (TelephonyManager tm=(TelephonyManager )this.getSystemService(Context.TELEPHONY_SERVICE); 但至少在Nexus 7平板电脑上会出现假阳性。

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

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

    3 回复  |  直到 11 年前
        1
  •  1
  •   sam    11 年前
    (TelephonyManager tm=(TelephonyManager )this.getSystemService(Context.TELEPHONY_SERVICE);
    

    我不知道为什么上面的代码返回假阳性,但你为什么不用电话管理器检查它的网络类型或网络运营商?例如,它可能会返回nexus 7的NETWORK_TYPE_UNKNOWN标志。

    return (android.telephony.TelephonyManager.getNetworkType()
        != android.telephony.TelephonyManager.NETWORK_TYPE_UNKNOWN)
    

    参考文献:

        2
  •  1
  •   dazed    10 年前

    我使用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模拟器上的测试表明,存在调用能力。

    尚未测试其他设备。

        3
  •  0
  •   Community Stefan Steinegger    7 年前

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

    您可以使用我的应答中的SMSSender: Send SMS until it is successful

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

    最后注册SENT广播。

    如果发送了短信,那么设备就有无线电功能,否则就没有,所以如果发送了信息,只需打开这些选项。

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

    只是为了给你另一个选择,而不是电话管理器。