如何找出Android设备是否具有蜂窝无线模块?(How to find out whether a

2019-07-22 19:18发布

我怎样才能找出确保设备真的有GSM,CDMA等移动网络设备(不只是WIFI)? 我不想查看当前连接的网络状态,因为设备可以是离线的那一刻。 我不想通过检查设备ID((TelephonyManager)act.getSystemService(Context.TELEPHONY_SERVICE))getDeviceId。(),因为一些设备会只是给你多态或虚拟设备ID。

Actualy,我需要精确地检查电池设备跳过TelephonyManager.getDeviceId和执行Settings.Secure.ANDROID_ID检查没有蜂窝无线电在这些设备上。 我至少有一个平板电脑(存储选项滚动的Excel 7" ),返回不同的IMEI号,每次你问它的时候,虽然它应该返回null,因为它没有小区无线(同样的情况在这里: 安卓:getDeviceId()返回一个IMEI,亚行外壳dumpsys iphonesubinfo回报设备ID = NULL ),但我需要有可靠的设备的ID每次我问时间相同。

我很乐意听听您的想法!

Answer 1:

如果你在商店发布,并要限制你的应用程序仅是实际可见的手机,你可以添加一个<uses-feature>到您的清单,要求对android.hardware.telephony 。 看看如果从适用于您的文档 。



Answer 2:

万一有人需要完整的解决方案是:使用反射,因为有些东西可能无法在某些版本的固件存在。 MainContext - 主要活动内容。

    static public int getSDKVersion()
{
    Class<?> build_versionClass = null;

    try
    {
        build_versionClass = android.os.Build.VERSION.class;
    }
    catch (Exception e)
    {
    }

    int retval = -1;
    try
    {
        retval = (Integer) build_versionClass.getField("SDK_INT").get(build_versionClass);
    }
    catch (Exception e)
    {
    }

    if (retval == -1)
        retval = 3; //default 1.5

    return retval;
}

static public boolean hasTelephony()
{
    TelephonyManager tm = (TelephonyManager) Hub.MainContext.getSystemService(Context.TELEPHONY_SERVICE);
    if (tm == null)
        return false;

    //devices below are phones only
    if (Utils.getSDKVersion() < 5)
        return true;

    PackageManager pm = MainContext.getPackageManager();

    if (pm == null)
        return false;

    boolean retval = false;
    try
    {
        Class<?> [] parameters = new Class[1];
        parameters[0] = String.class;
        Method method = pm.getClass().getMethod("hasSystemFeature", parameters);
        Object [] parm = new Object[1];
        parm[0] = "android.hardware.telephony";
        Object retValue = method.invoke(pm, parm);
        if (retValue instanceof Boolean)
            retval = ((Boolean) retValue).booleanValue();
        else
            retval = false;
    }
    catch (Exception e)
    {
        retval = false;
    }

    return retval;
}


文章来源: How to find out whether android device has cellular radio module?