Android-如何确定一个android设备

Android-如何确定一个android设备

夜无邪 发布于 2017-07-19 字数 195 浏览 1011 回复 7

现在因为要判断一个apk是否在某一android设备是否安装过
扫描设备安装应用包名的同时需要确定设备的唯一性
先前考虑过winfmac,手机号,sdkversion等
但是这些都可能因为用户刷ROM后改变

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(7

想挽留 2017-10-08 7 楼

由于多种不确定,imei和山寨机器,我们一般采用多个标志组合确认的方式:

 final TelephonyManager tm = (TelephonyManager) ctx.getSystemService(Context.TELEPHONY_SERVICE);

tmDevice = "" + tm.getDeviceId();
tmSerial = "" + tm.getSimSerialNumber();
androidId = "" + Secure.getString(ctx.getContentResolver(), Secure.ANDROID_ID);

UUID deviceUuid = new UUID(androidId.hashCode(), ((long) tmDevice.hashCode() << 32) | tmSerial.hashCode());

uuid = deviceUuid.toString();

浮生未歇 2017-09-20 6 楼

其实还可以使用MAC地址来组合定性。

 WifiManager wifi = (WifiManager) context .getSystemService(Context.WIFI_SERVICE);
WifiInfo info = wifi.getConnectionInfo();
imei = info.getMacAddress();

清晨说ぺ晚安 2017-09-13 5 楼

两种方式:
(前提你要部署了jdk和android sdk)
1.直接在windows/linux命令窗口执行 adb devices(前提你要部署了jdk和android sdk)
2.通过java 调用shell命令。shell命令为adb devices.

灵芸 2017-09-08 4 楼

除了imei号作为识别以外,还可以用sim卡号的即手机号作为识别,但也不一定都能成功,取决于卡本身的信息。终究还是要看你的目的是什么?

TelephonyManager telephonyManager = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);
String phoneNumber = telephonyManager.getLine1Number();

补充一种方法

import android.provider.Settings.Secure;
private String android_id = Secure.getString(getContext().getContentResolver(),
Secure.ANDROID_ID);

甜柠檬 2017-08-24 3 楼

TelephonyManager telManager = (TelephonyManager) getSystemService(TELEPHONY_SERVICE);
Log.i("xxx", ">>IMEI:" + telManager.getDeviceId());
Log.i("xxx", ">>IMSI:" + telManager.getSubscriberId());
<uses-permission android:name="android.permission.READ_PHONE_STATE"></uses>

不靠谱的说,很多山寨Android pad 的IMEI也是无法获取的!0000000000000

甜柠檬 2017-08-11 2 楼

这里是你在Android里读出 唯一的 IMSI-ID / IMEI-ID 的方法。

String myIMSI = android.os.SystemProperties.get(android.telephony.TelephonyProperties.PROPERTY_IMSI);
// within my emulator it returns: 310995000000000

String myIMEI = android.os.SystemProperties.get(android.telephony.TelephonyProperties.PROPERTY_IMEI);
// within my emulator it returns: 000000000000000

夜无邪 2017-07-19 1 楼

一般建议先拿IMEI号来唯一确定一个设备的身份,确实如上所说,有些设备没有电话相关功能的话是拿不到IMEI的,比如很多低价国产Android平板,但是只要是Android设备,不管是没有电话功能的平板,还是没有电话功能的MP4,比如Galaxy PLAYER,他们都是有WIFI功能的,所以可以通过mac地址来唯一确定一台设备。那些做第3方统计分析的平台,比如友盟,也是采用先拿IMEI,后拿MAC地址来确定设备。我觉得这是一个比较合理的方法,还有的通过执行一些linux命令去拿CPU序列号的,由于每个设备厂商实现各不同,有时候也是拿不到的。所以一般的话我认为就通过IMEI和MAC地址来唯一标识一台设备是比较合理的。