如何找出特定设备是否具有SIM硬件支持?

8

我希望能够根据SIM卡硬件的存在与否,在我的应用程序中禁用与CALL和SMS相关的功能。现在,初学者对此的处理方法是使用以下方式检查手机类型:

if (telephonyManager1.getPhoneType() == TelephonyManager.PHONE_TYPE_NONE)

如果为真,则支持此功能。

一切都很好,直到我遇到仅支持数据和短信的Sony Tablet S。没有语音支持。因此,对于此设备,我需要仅禁用呼叫功能,但继续使用短信支持。 Sony平板返回TelephonyManager.PHONE_TYPE_NONE,因此我无法使用上述方法。 而且,

telephonyManager1.getSimState();

返回1,即SIM_STATE_ABSENT,在HTC FLYER上也是一样的,因为它本身不支持SIM硬件。

那么有没有办法知道SIM硬件是否存在(无论是否插入SIM卡)?


你的最终目标是知道是否支持呼叫?为什么你关心SIM卡? - nandeesh
WiFi上不支持VOIP通话? - MSalters
@nandeesh - 我的目标是要知道是否支持单独的呼叫和短信。更确切地说,我想知道是否有SIM卡插槽可用。 - binaryKarmic
我明白你想要电话和短信功能,但为什么需要SIM卡槽呢?大多数CDMA手机都没有SIM卡槽。 - nandeesh
@nandeesh - 我这里只涉及平板电脑。而且仅仅检查通话支持并不是问题所在。我的情况是在没有通话支持的情况下检查是否支持短信。这就是Sony Tablet S的情况。它支持短信但不支持通话。 - binaryKarmic
1个回答

0

使用

PackageManager pm = this.getPackageManager();
boolean hasTelephony=pm.hasSystemFeature(PackageManager.FEATURE_TELEPHONY);

编辑:

尝试使用

TelephonyManager.getLine1Number()

如果返回null,则表示您没有电话功能。我还没有尝试过,请试一试。

1
我在HTC Flyer和Sony Tablet S上进行了检查...两者都返回false :( 。我感到惊讶。文档说, “getSystemAvailableFeatures()和hasSystemFeature(String)的功能:设备具有支持数据通信的电话收音机。”不过,这款Sony平板电脑支持短信消息。 - binaryKarmic
即使它返回null,这对我没有帮助...因为我是通过TelephonyManager.PHONE_TYPE_NONE来判断是否支持CALL的。我需要检查是否支持SMS。 - binaryKarmic

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接