有没有办法告诉Android设备是否只有wifi?

时间:2011-09-27 13:21:11

标签: android

我正在尝试找出一种可靠的方法来判断一个Android设备是否只支持wifi。我尝试了几种方法:

- 尝试获取设备ID(IMEI / MEID),如果我无法获取IMEI / MEID号码,那么我可以假设该设备仅限wifi。这不起作用,因为某些手机在进入飞行模式时不会返回设备ID。 - 尝试阅读TelephonyManager.getPhoneType。这不起作用我正在测试的wifi设备返回PHONE_TYPE_GSM,而我希望它返回PHONE_TYPE_NONE。

我想知道是否有人能成功区分仅限wifi的设备和非wifi的设备。

3 个答案:

答案 0 :(得分:4)

您可以在应用中查询系统功能,看看是否有效。

PackageManager pm = getPackageManager();
boolean isAPhone = pm.hasSystemFeature(PackageManager.FEATURE_TELEPHONY);

如果您关心GSM / CDMA,请使用更具体的FEATURE_TELEPHONY_GSMFEATURE_TELEPHONY_CDMA

如果设备在撒谎,那么你当然没什么可以做的。

答案 1 :(得分:2)

以下解决方案更适合我:

TelephonyManager mgr = (TelephonyManager)ctx.getSystemService( Context.TELEPHONY_SERVICE );
return mgr.getPhoneType() != TelephonyManager.PHONE_TYPE_NONE;

以下没有像Nook Tablet这样的设备上工作:

PackageManager pm = ctx.getPackageManager();
return pm.hasSystemFeature( PackageManager.FEATURE_TELEPHONY );

答案 2 :(得分:0)

我遇到了类似的问题,我查了几个解决方案。到目前为止,其中只有一个可靠地工作

if (mContext.getSystemService(Context.TELEPHONY_SERVICE) == null) {
    // wifi-only device
}

这个假设是错误的。我的无线网络Nexus 7返回一个Telephony Manager对象。

mContext.getPackageManager().hasSystemFeature(PackageManager.FEATURE_TELEPHONY)

这在我的Nexus 7上都返回false。其中一个支持数据连接,另一个只支持wifi

TelephonyManager telMgr = mContext.getSystemService(Context.TELEPHONY_SERVICE)
telMgr.getPhoneType()

我希望{* 1}}为仅限wifi的nexus 7和其他Nexus 7的PHONE_TYPE_NONE。我为两个Nexus 7获得PHONE_TYPE_GSM

PHONE_TYPE_NONE

这个解决方案让我很担心。在状态转换期间也使用if(telMgr.getSimState() == TelephonyManager.SIM_STATE_UNKNOWN) { // Wifi-only device } else if (telMgr.getSimState() == TelephonyManager.SIM_STATE_ABSENT) { // Device that supports data connection, but no SIM card present } 。此外,某些设备支持数据连接,但没有SIM卡。

我最喜欢的解决方案如下

SIM_STATE_UNKNOWN

唯一让我担心的是,如果设备支持ConnectivityManager mConMgr = mContext.getSystemService(Context.CONNECTIVITY_SERVICE) if (mConMgr.getNetworkInfo(ConnectivityManager.TYPE_MOBILE) == null) { //wifi-only device } TYPE_MOBILE_HIPRI但不支持TYPE_MOBILE_MMS,我怀疑情况并非如此。