以下の画像に示されている値にプログラムでアクセスするにはどうすればよいですか?
これはハードウェアのシリアル番号です。アクセスするには
Android 8以降(> = SDK 26)Android.os.Build.getSerial()
を使用します。これには危険な許可が必要です READ_PHONE_STATE 。 Android.os.Build.SERIAL
を使用すると、 Android.os.Build.UNKNOWN が返されます。
Android 7.1以前(<= SDK 25)以前 Android.os.Build.SERIAL
は有効なシリアルを返します。
あらゆるデバイスに固有です。一意のデバイスIDを取得/使用する方法の可能性を探している場合は、 here と読む必要があります。
許可を必要としないリフレクションを含むソリューションについては、 this answer を参照してください。
Android 7.1までは、次の方法で取得できます。
_Build.SERIAL
_
Android 8(SDK 26)以上では、このフィールドは UNKNOWN
を返し、次の方法でアクセスする必要があります。
_Build.getSerial()
_
危険な許可_Android.permission.READ_PHONE_STATE
_ が必要です。
Android Q Build.getSerial()
を使用するとQが必要になるため、少し複雑になります:
_Android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE
_(システムアプリでのみ取得可能)、または呼び出しパッケージがデバイスになるまたはプロファイル所有者と _READ_PHONE_STATE
_ 権限があります。これは、ほとんどのアプリがこの機能を使用できないことを意味します。 Googleの Android Qの発表 をご覧ください。
Android SDKリファレンス を参照してください
一意の識別子のみが必要な場合、ハードウェア識別子を使用しないようにすることをお勧めします。Googleは、プライバシー上の理由からハードウェア識別子へのアクセスを継続的に困難にしているためです。 UUID.randomUUID().toString();
を生成し、最初にアクセスする必要があるときに保存することができます。共有設定。または、 _Android_ID
_ を使用することもできます。これは、デバイス、ユーザー、および(Android 8+)アプリのインストールのみに固有の8バイトの16進文字列です。そのトピックの詳細については、 一意の識別子のベストプラクティス を参照してください。
Build.SERIAL
空にすることができます または場合によっては、デバイスの設定で確認できる値とは異なる値( proof 1 、 proof 2 )を返します。
より完全で堅牢なソリューションが必要な場合は、単一の Gist で見つかる可能性のあるすべてのソリューションをコンパイルしました。以下はその簡略版です。
public static String getSerialNumber() {
String serialNumber;
try {
Class<?> c = Class.forName("Android.os.SystemProperties");
Method get = c.getMethod("get", String.class);
serialNumber = (String) get.invoke(c, "gsm.sn1");
if (serialNumber.equals(""))
serialNumber = (String) get.invoke(c, "ril.serialnumber");
if (serialNumber.equals(""))
serialNumber = (String) get.invoke(c, "ro.serialno");
if (serialNumber.equals(""))
serialNumber = (String) get.invoke(c, "sys.serialnumber");
if (serialNumber.equals(""))
serialNumber = Build.SERIAL;
// If none of the methods above worked
if (serialNumber.equals(""))
serialNumber = null;
} catch (Exception e) {
e.printStackTrace();
serialNumber = null;
}
return serialNumber;
}
新しいデバイスまたはAndroidバージョン。投稿も歓迎します。