Android 获取设备唯一标识

public class MainActivity extends AppCompatActivity {

    private static final String PERMISSION_READ_PHONE_STATE = "android.permission.READ_PHONE_STATE";
    private static final String LINE_SEPARATOR = System.getProperty("line.separator");
    private TextView textView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        textView = findViewById(R.id.textview);

        StringBuilder sb = new StringBuilder();
        sb.append("TelephonyId");
        sb.append(LINE_SEPARATOR);
        sb.append(getTelephonyId());
        sb.append(LINE_SEPARATOR);

        sb.append("MacAddress");
        sb.append(LINE_SEPARATOR);
        sb.append(getMacAddress());
        sb.append(LINE_SEPARATOR);

        sb.append("AndroidId");
        sb.append(LINE_SEPARATOR);
        sb.append(getAndroidId());

        textView.setText(sb.toString());
    }

    private void randomTitle() {
        UUID uuid = UUID.randomUUID();
        getActionBar().setTitle(uuid.toString());
    }

    /**
     * 单卡工程中一个手机号对应一个IMEI号,双卡手机则会对应两个IMEI号
     */
    private String getTelephonyId() {
        TelephonyManager telephonyMgr = (TelephonyManager) getSystemService(TELEPHONY_SERVICE);
        if (PackageManager.PERMISSION_GRANTED == checkSelfPermission(PERMISSION_READ_PHONE_STATE)) {
            String imei = telephonyMgr.getImei();
            String simSerialNumber = telephonyMgr.getSimSerialNumber();
            return imei + LINE_SEPARATOR + simSerialNumber;
        }
        return null;
    }

    /**
     * Mac 指的就是我们设备网卡的唯一设别码,该码全球唯一,一般称为物理地址,硬件地址用来定义设备的位置
     */
    private String getMacAddress() {
        String macAddress = null;
        StringBuilder buf = new StringBuilder();
        NetworkInterface networkInterface = null;
        try {
            networkInterface = NetworkInterface.getByName("eth1");
            if (networkInterface == null) {
                networkInterface = NetworkInterface.getByName("wlan0");
            }
            if (networkInterface == null) {
                return "02:00:00:00:00:00";
            }
            byte[] addr = networkInterface.getHardwareAddress();
            for (byte b : addr) {
                buf.append(String.format("%02X:", b));
            }
            if (buf.length() > 0) {
                buf.deleteCharAt(buf.length() - 1);
            }
            macAddress = buf.toString();
        } catch (SocketException e) {
            e.printStackTrace();
            return "02:00:00:00:00:00";
        }
        return macAddress;
    }

    /**
     * 在设备首次运行的时候,系统会随机生成一64位的数字,并把这个数值以16进制保存下来,这个16进制的数字就是ANDROID_ID,但是如果手机恢复出厂设置这个值会发生改变。
     */
    private String getAndroidId() {
        return Settings.Secure.getString(getContentResolver(), Settings.Secure.ANDROID_ID);
    }
}

当前测试手机:360N7 lite, Android 8.0
应用分屏通过在 application 和 activiy 同时设置 android:resizeableActivity=“true” 来实现
这说明可以通过 Imei 和 simSerialNumber 来实现判断是否双开,所以不要包有侥幸心里。
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值