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 来实现判断是否双开,所以不要包有侥幸心里。