我正在开发一个使用zeroconf(bonjour)来发现设备的应用程序 - 所以我需要为每个Android设备提供某种名称(不只是一堆数字和字母,而是像“Alex的设备”那样有意义的东西) 。在iOS中它可以很容易地完成 - 这可能在android中吗?
答案 0 :(得分:1)
可以有许多帐户链接到该设备。您可以使用AccountManager来获取它们。例如,Google帐户上的电子邮件:
AccountManager am = AccountManager.get(this);
Account[] ac = am.getAccountsByType("com.google");
for (Account account : ac) {
Log.d ("Account", ac.name);
}
或者,您可以使用android.os.Build.MODEL或类似内容。
答案 1 :(得分:1)
假设您的应用程序要求设备具有网络连接,您可以尝试使用设备的MAC地址,该地址应该是全局唯一的。这可以通过WifiInfo类获得:
WifiManager manager = (WifiManager)getSystemService(Context.WIFI_SERVICE);
WifiInfo info = manager.getConnectionInfo();
String macAddress = info.getMacAddress();
您还需要在清单中设置ACCESS_WIFI_STATE权限。
答案 2 :(得分:0)
你可以获得Android手机的IMEI,它是唯一的,
您可以使用类getDeviceId()
TelephonyManager
来获取它
注意:您需要在清单中添加权限:READ_PHONE_STATE
答案 3 :(得分:0)
有关如何为安装应用程序的每个Android设备获取唯一标识符的详细说明,请参阅此官方Android开发人员博客帖子:
http://android-developers.blogspot.com/2011/03/identifying-app-installations.html
最好的方法是在安装时生成一个自己,然后在重新启动应用程序时读取它。
我个人认为这是可以接受但不理想的。 Android提供的任何一个标识符都不适用于所有情况,因为大多数都依赖于手机的无线电状态(wifi开/关,蜂窝开/关,蓝牙开/关)。其他像Settings.Secure.ANDROID_ID必须由制造商实施,并不保证是唯一的。
以下是将数据写入INSTALLATION文件的示例,该文件将与应用程序在本地保存的任何其他数据一起存储。
public class Installation {
private static String sID = null;
private static final String INSTALLATION = "INSTALLATION";
public synchronized static String id(Context context) {
if (sID == null) {
File installation = new File(context.getFilesDir(), INSTALLATION);
try {
if (!installation.exists())
writeInstallationFile(installation);
sID = readInstallationFile(installation);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
return sID;
}
private static String readInstallationFile(File installation) throws IOException {
RandomAccessFile f = new RandomAccessFile(installation, "r");
byte[] bytes = new byte[(int) f.length()];
f.readFully(bytes);
f.close();
return new String(bytes);
}
private static void writeInstallationFile(File installation) throws IOException {
FileOutputStream out = new FileOutputStream(installation);
String id = UUID.randomUUID().toString();
out.write(id.getBytes());
out.close();
}
}