任何人都可以告诉我Android中设备UDID的长度,因为我在Android中获得了UDID,它只有16个字符,但iPhone UDID长度为40.
我使用以下代码来检测ID:
id = android.provider.Settings.System.getString(super.getContentResolver(),
android.provider.Settings.Secure.ANDROID_ID);
Run Code Online (Sandbox Code Playgroud) 在开发需要我唯一识别手机用户的应用时.我希望就是否最好使用手机的UDID或IMEI提出一些建议.使用任何一个都有任何优点/缺点.所有评论将不胜感激
有没有办法访问SharedPreferencesAndroid上的用户配置文件?
例如,如果UserA对应用程序首选项进行了更改,我希望该更改也可供UserB使用.我试图使用写入getFilesFir()路径的文本文件并从其他帐户读取,但是当userA写入文件时,它不可用于userB.我写的文件用MODE_PRIVATE,因为MODE_WORLD_READABLE和MODE_WORLD_WRITABLE已被弃用,但我不知道使用这些将有助于下手.
有没有人知道是否有办法集中我的应用程序设置的首选项,以便它可以在所有用户之间共享?我想避免向SD卡写任何东西.
我正在构建Android应用程序,需要通过一些唯一的数字/字符串来识别设备.
我听说过ANDROID_ID,但也有报道称在一些手机型号甚至更新上都可以是相同的.另一件事是它在出厂重置或系统重新安装后重新创建.我可以忍受,虽然我更喜欢它,如果它保持不变.
有没有其他方法来识别手机而不需要更多权限?IMEI需要它们(android.permission.READ_PHONE_STATE),但它可以吓跑用户.
沙扎姆是怎么做到的?我知道它永久地识别了手机(它记得我在为新用户引入5个标签,每月限制一个用户之前),即使我完全重新安装了系统.
在谈论独特的Android ID时,我确信每个人都看过这个,但是我也试图想出一个解决方案来唯一识别任何Android设备.我很乐意使用公开发布的课程,但我还没找到.
在我的情况下,要求是能够唯一地识别具有某种形式的互联网连接的任何设备(例如GPRS或Wi-Fi)并在API级别8(v2.2 Froyo)上运行.我不知道任何设备没有Wi-Fi或SIM卡,所以如果有的话请告诉我!
我们通过使用Wi-Fi mac地址的哈希在iOS中解决了这个问题,因为所有iOS设备都应该具有此功能.但是对于Android,技术(例如上面引用的SO帖子的答案)指的TelephonyManager是可以返回的类null(例如当设备没有SIM连接时,如Nexus 7)或者getContext().getContentResolver(), Secure.ANDROID_ID根据此处不是在Froyo之前的版本上100%可靠(这对我来说是幸运的).然而,如果有任何问题,它不会再发布任何问题,如果有的话,请告诉我!我也读过这个可以回来的null.根据这里它可以改变工厂重置,但这不是一个主要问题.
所以我把它放在一起生成一个有希望的唯一GUID:[ 这个方法不完整!]
public static String GetDeviceId(Context context)
{
// Custom String Hash 1
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append("someRandomData"); // Not really needed, but means the stringBuilders value won't ever be null
// TM Device String
final TelephonyManager tm = (TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE);
String tmDeviceId = tm.getDeviceId(); // Could well be set to null!
LogMsg.Tmp("TM Device String …Run Code Online (Sandbox Code Playgroud) 当我试图通过这种方式在Android O设备上获取Blutooth地址时:
private String getBlutoothAddress(Context mContext){
// Check version API Android
BluetoothAdapter myBluetoothAdapter;
String macAddress;
int currentApiVersion = android.os.Build.VERSION.SDK_INT;
if (currentApiVersion >= android.os.Build.VERSION_CODES.M) {
macAddress = Settings.Secure.getString(mContext.getContentResolver(), "bluetooth_address");
} else {
// Do this for phones running an SDK before lollipop
macAddress = myBluetoothAdapter.getAddress();
}
}
Run Code Online (Sandbox Code Playgroud)
上面的所有代码仍然运行良好我仍然使用该代码Anroid O(8.0)它返回macAddress = null.
java android android-permissions android-bluetooth android-8.0-oreo
我只是想知道获取设备 ID 的最佳方式是什么我有 2 个选项,要么使用下面需要运行时权限的代码android.permission.READ_PHONE_STATE-
private String android_id = Secure.getString(getContext().getContentResolver(),
Secure.ANDROID_ID);
Run Code Online (Sandbox Code Playgroud)
或者
其次,我可以选择 UUID,它不需要任何运行时权限,但需要与用户数据(如电子邮件或电话)映射来识别。
String uniqueID = UUID.randomUUID().toString();
Run Code Online (Sandbox Code Playgroud)
如果有任何关于使用哪一种以及为什么使用的建议,我们将不胜感激。
谢谢
有没有办法为特定的独特设备构建应用程序?假设我有一个Android设备,我想只为该设备创建一个apk文件,那个apk不能安装在任何其他设备上,是否可能?
可能重复:
是否有唯一的Android设备ID?
我使用下面的代码来获取Android设备IMEI,我如何更改下面的代码来获取Android设备唯一ID.
String getDeviceID1(TelephonyManager phonyManager){
String id = phonyManager.getDeviceId();
if (id == null){
id = "not available";
}
int phoneType = phonyManager.getPhoneType();
switch(phoneType){
case TelephonyManager.PHONE_TYPE_NONE:
return "" + id;
case TelephonyManager.PHONE_TYPE_GSM:
return "" + id;
case TelephonyManager.PHONE_TYPE_CDMA:
return "" + id;
/*
* for API Level 11 or above
* case TelephonyManager.PHONE_TYPE_SIP:
* return "SIP";
*/
default:
return "" + id;
}
//I used to show IMEI
TextView textDeviceID = (TextView)findViewById(R.id.deviceid);
//retrieve a reference to an instance of TelephonyManager …Run Code Online (Sandbox Code Playgroud) 我正在开发一个允许用户从多个Android设备登录的应用程序(服务器 - 安卓客户端).当用户登录设备时,该设备将在服务器端注册,但我不知道如何避免重复,所以我想知道有没有机会唯一识别Android设备?我认为Google Play和Facebook可以做到这一点.