Androidデバイスごとに一意のデバイスIDを取得したい。現在タブレットデバイス用に開発中です。一意のデバイスIDを取得し、対応する値を保存したい...
だから、TelephonyManager.getDeviceId()を使用した場合にタブレットデバイスが値を返すかどうかを知りたいです... ???または各デバイスに固有の他の値はありますか?
これはnot重複した質問です。結局のところ、GoogleのCTSでは、TelephonyManagerのgetPhoneTypeはnoneである必要があり、TelephonyManagerのgetDeviceIdは電話以外のデバイスではnullである必要があります。
したがって、IMEIを取得するには、次を使用してみてください。
String imei = SystemProperties.get("ro.gsm.imei")
残念ながら、SystemPropertiesはAndroid OSの非公開クラスです。つまり、通常のアプリケーションでは公開されていません。アクセスのヘルプについては、この投稿を参照してください: WhereはAndroid.os.SystemProperties
TelephonyManger.getDeviceId()一意のデバイスIDを返します。たとえば、GSMの場合はIMEI、CDMA電話の場合はMEIDまたはESNです。
final TelephonyManager mTelephony = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
String myAndroidDeviceId = mTelephony.getDeviceId();
しかし、私は使用することをお勧めします:
Settings.Secure.Android_ID Android IDを一意の64ビット16進文字列として返します。
String myAndroidDeviceId = Secure.getString(getApplicationContext().getContentResolver(), Secure.Android_ID);
TelephonyManger.getDeviceId()がnullを返す場合があるため、一意のIDを保証するには、次のメソッドを使用します。
public String getUniqueID(){
String myAndroidDeviceId = "";
TelephonyManager mTelephony = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
if (mTelephony.getDeviceId() != null){
myAndroidDeviceId = mTelephony.getDeviceId();
}else{
myAndroidDeviceId = Secure.getString(getApplicationContext().getContentResolver(), Secure.Android_ID);
}
return myAndroidDeviceId;
}
Android 8なので、すべてが変更されました。Build.getSerial()
を使用して、デバイスのシリアル番号を取得し、権限を追加する必要がありますREAD_PHONE_STATE
。
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
serial = Build.getSerial(); // Requires permission READ_PHONE_STATE
} else {
serial = Build.SERIAL; // Will return 'unknown' for device >= Build.VERSION_CODES.O
}
そして、この方法でIMEIまたはMEIDを取得します。
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
String imei = tm.getImei(); // Requires permission READ_PHONE_STATE
serial = imei == null ? tm.getMeid() : imei; // Requires permission READ_PHONE_STATE
} else {
serial = tm.getDeviceId(); // Requires permission READ_PHONE_STATE
}