当前位置:天才代写 > tutorial > 安卓教程 > 获取Android设备标识符

获取Android设备标识符

2021-02-26 14:18 星期五 所属: 安卓教程 浏览:28

Android开发设计中有时因业务流程必须手机客户端要造成一个唯一的标志符使网络服务器能鉴别某台Android机器设备,现阶段一般应用三种标志符各自为DeviceIdAndroidIdMAC地址

获得DeviceId

在获得deviceId以前先要AndroidManifest中申明管理权限:

<uses-permission android:name="android.permission.READ_PHONE_STATE" />

根据下列编码获得DeviceId:

    public static String getDeviceId(Context context){
        String  deviceId = null;
        if(ContextCompat.checkSelfPermission(context, Manifest.permission.READ_PHONE_STATE) == PackageManager.PERMISSION_GRANTED) {
            TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
            deviceId = tm.getDeviceId();
        }
        return deviceId;
    }

在获得机器设备ID时应当留意:

  • 必须READ_PHONE_STATE管理权限
  • 在6.0或高些的机器设备处时由于管理权限要在运作时要求而READ_PHONE_STATE是一个dangerous管理权限客户极有可能不允许这一管理权限要求

获得AndroidId

获得AndroidId是不用管理权限的可是AndroidId是很有可能变的,AndroidId是在客户第一次激话这一机器设备时造成的因此 当客户重置手机时AndroidId会造成转变 ,理论上这一AndroidId是能够接纳的终究重置手机这一事产生也不会太经常。

获得AndroidId:

 public static String    getAndroidId(Context context){
        return Settings.Secure.getString(context.getContentResolver(), Settings.Secure.ANDROID_ID);
    }

获得MAC地址

能够应用WIFI的MAC地址来做为标志符,觉得目前这类方法较为靠谱小结以下:

  • Mac详细地址是唯一的
  • 立即造成在硬件配置上大部分不容易变动
  • 不用附加的管理权限
  • 往上或兼容问题
    public static String getMacAddress(Context context) {
        String macAddress = null;
        try{
            String wifiInterfaceName = "wlan0";
            Enumeration<NetworkInterface> interfaces = NetworkInterface.getNetworkInterfaces();
            while (interfaces.hasMoreElements()) {
                NetworkInterface iF = interfaces.nextElement();
                if(iF.getName().equalsIgnoreCase(wifiInterfaceName)) {
                    byte[] addr = iF.getHardwareAddress();
                    if (addr == null || addr.length == 0) {
                        return null;
                    }

                    StringBuilder buf = new StringBuilder();
                    for (byte b : addr) {
                        buf.append(String.format("X:", b));
                    }                if (buf.length() > 0) {
                        buf.deleteCharAt(buf.length() - 1);
                    }
                    macAddress =  buf.toString();
                    break;
                }
            }
        }catch (SocketException se){
            macAddress = null;
        }

        if(TextUtils.isEmpty(macAddress)){
            android.net.wifi.WifiManager wifi = (android.net.wifi.WifiManager) context.getSystemService(Context.WIFI_SERVICE);
            macAddress = wifi.getConnectionInfo().getMacAddress();
        }

        return macAddress;
    }

应用Android内置的API时有一个坑WifiInfo里边有那样一段编码:

   /**
     * Default MAC address reported to a client that does not have the
     * android.permission.LOCAL_MAC_ADDRESS permission.
     *
     * @hide
     */
    public static final String DEFAULT_MAC_ADDRESS = "02:00:00:00:00:00";

上边的编码是以6.0API拷贝出去的意思是说假如你沒有表明android.permission.LOCAL_MAC_ADDRESS管理权限那麼将回到这一默认设置的MAC地址我还在6.0上的设备上试了一下仿佛并沒有像它说的那般我申明android.permission.LOCAL_MAC_ADDRESS只限后還是取得这一默认设置的MAC地址。都没有再次细究发觉根据JAVA的API也是能够使到MAC地址的。

 

    关键字:

天才代写-代写联系方式