3

デバイスに gsm、cdma、またはその他のセルラー ネットワーク機器 (WiFi だけでなく) が実際に搭載されていることを確認するにはどうすればよいですか? デバイスが現在オフラインになっている可能性があるため、現在の接続ネットワーク状態を確認したくありません。また、 ((TelephonyManager) act.getSystemService(Context.TELEPHONY_SERVICE)).getDeviceId() を介してデバイス ID を確認したくありません。これは、一部のデバイスが多態的またはダミーのデバイス ID を提供するだけだからです。

実際には、TelephonyManager.getDeviceId をスキップし、セルラー無線を持たないデバイスで Settings.Secure.ANDROID_ID チェックを実行するために、セル機器を正確にチェックする必要があります。少なくとも 1 台のタブレット (ストレージ オプション スクロール Excel 7") を持っていますが、これは尋ねるたびに異なる IMEI を返しますが、セル無線がないため null を返す必要があります (ここで同じ状況: Android: getDeviceId() は IMEI を返します。 adb shell dumpsys iphonesubinfo returns Device ID=NULL ).しかし、私が尋ねるたびに同じ信頼できるデバイスIDが必要です.

あなたの考えを聞いてうれしいです!

4

2 に答える 2

1

ストアで公開していて、アプリケーションを実際の電話だけに表示するように制限したい場合は<uses-feature>、マニフェストに を追加して を要求することができますandroid.hardware.telephonyドキュメントからそれが機能するかどうかを確認してください。

于 2013-03-22T22:09:42.090 に答える
1

誰かがこれに対する完全な解決策を必要とする場合に備えて: 一部のファームウェア バージョンには存在しないものがあるため、リフレクションが使用されます。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;
}
于 2013-03-26T17:26:43.140 に答える