我怎样才能找出确保设备真的有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每次我问时间相同。
我很乐意听听您的想法!
如果你在商店发布,并要限制你的应用程序仅是实际可见的手机,你可以添加一个<uses-feature>
到您的清单,要求对android.hardware.telephony
。 看看如果从适用于您的文档 。
万一有人需要完整的解决方案是:使用反射,因为有些东西可能无法在某些版本的固件存在。 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;
}