如何在Android中获得独特的设备数量?

时间:2018-06-07 03:36:03

标签: android

我已经尝试过这些方法,如IMEI,MEID,mac地址,android_id,但都不行。

如何在Android中获得独特的设备数量?

5 个答案:

答案 0 :(得分:1)

Android设备有多个唯一标识符

<强> IMEI

TelephonyManager TelephonyMgr = (TelephonyManager)getSystemService(TELEPHONY_SERVICE);
String imei = TelephonyMgr.getDeviceId();

许可

android.permission.READ_PHONE_STATE

WLAN MAC地址

WifiManager wifi = (WifiManager)getSystemService(Context.WIFI_SERVICE);
String wanMAC = wifi .getConnectionInfo().getMacAddress();

许可

android.permission.ACCESS_WIFI_STATE

蓝牙MAC地址

BluetoothAdapter bluetoothAdapter =BluetoothAdapter.getDefaultAdapter();
String bluetoothMAC = bluetoothAdapter .getAddress();

许可

android.permission.BLUETOOTH

Android ID

String androidID = Secure.getString(getContentResolver(), Secure.ANDROID_ID);

答案 1 :(得分:1)

由于大多数应用程序的要求是识别特定安装而不是物理设备,因此如果要使用UUID类,则为用户获取唯一ID的良好解决方案。来自Google的Reto Meier在Google I / O演示文稿中提供了以下解决方案:

private static String uniqueID = null;
private static final String PREF_UNIQUE_ID = "PREF_UNIQUE_ID";
public synchronized static String id(Context context) {
   if (uniqueID == null) {
      SharedPreferences sharedPrefs = context.getSharedPreferences(
         PREF_UNIQUE_ID, Context.MODE_PRIVATE);
      uniqueID = sharedPrefs.getString(PREF_UNIQUE_ID, null);
      if (uniqueID == null) {
         uniqueID = UUID.randomUUID().toString();
         Editor editor = sharedPrefs.edit();
     editor.putString(PREF_UNIQUE_ID, uniqueID);
     editor.commit();
     }
   }
   return uniqueID;
}

UUID.randomUUID()方法为特定安装生成唯一标识符。您只需存储该值,您的用户将在下次启动应用程序时被识别。您还可以尝试将此解决方案与Android备份服务相关联,以便即使用户在其他设备上安装您的应用程序,也可以向用户提供信息。

您可以在https://medium.com/@ssaurel/how-to-retrieve-an-unique-id-to-identify-android-devices-6f99fd5369eb

了解详情

答案 2 :(得分:1)

在Android 10中,您无法访问不可重置的设备ID,例如IMEI,MEID等。

因此,我认为您最好的机会是创建一个UUID。您可以使用下面的代码,并将此UUID保存到数据库或首选项文件中。

   String uniqueID = UUID.randomUUID().toString();

作为一个随机数,每次调用此方法时,它都会返回一个不同的代码,我想这不是您要查找的。

要从UUID获得“唯一ID”,最好的选择是下面的代码。它可以正常工作,但是文档要求避免使用Android_ID。

   String androidId = Settings.Secure.getString(context.getContentResolver(),
            Settings.Secure.ANDROID_ID);

   UUID androidId_UUID = UUID
            .nameUUIDFromBytes(androidId.getBytes("utf8"));

该代码将为您提供几乎唯一的代码,因为如果用户将其重置为出厂设置,则该数字将被更改。

我正在寻找获取唯一ID的另一种方法,但是直到现在,我仍然找不到。

这里有一些应该有用的Android开发人员文档。 定义唯一ID的良好习惯 https://developer.android.com/training/articles/user-data-ids

如何根据用例定义唯一的ID:

https://developer.android.com/training/articles/user-data-ids#common-use-cases

我希望这可以帮助某人。

答案 3 :(得分:0)

要检索与您的设备相关联的唯一ID,您可以使用以下代码:

import android.telephony.TelephonyManager;
import android.content.Context;
// ...
 TelephonyManager telephonyManager;
  telephonyManager = (TelephonyManager) getSystemService(Context.
                TELEPHONY_SERVICE);
        /*
      * getDeviceId() returns the unique device ID.
       * For example,the IMEI for GSM and the MEID or ESN for CDMA phones.
         */
            String deviceId = telephonyManager.getDeviceId();
         /*
       * getSubscriberId() returns the unique subscriber ID,
         * For example, the IMSI for a GSM phone.
          */
           String subscriberId = telephonyManager.getSubscriberId();

安全的Android ID

String androidId = Settings.Secure.getString(getContentResolver(),
                 Settings.Secure.ANDROID_ID);

答案 4 :(得分:0)

我的项目中使用了以下代码

要获取唯一的 Android ID

 static String androidID = Settings.Secure.getString(MyApplication.getContext().getContentResolver(), Settings.Secure.ANDROID_ID);

我将其用作全局对象,这样我就可以在项目中的任何地方使用