0

我正在开发一个使用 zeroconf (bonjour) 来发现设备的应用程序 - 所以我需要给每个 android 设备起一个名字(不仅仅是一堆数字和字母,而是像“Alex's Device”这样有意义的名字)。在 iOS 中它可以很容易地完成 - 这在 android 中可能吗?

4

4 回答 4

1

假设您的应用程序需要设备具有网络连接,您可以尝试使用设备的 MAC 地址,该地址应该是全球唯一的。这可以通过 WifiInfo 类获得:

WifiManager manager = (WifiManager)getSystemService(Context.WIFI_SERVICE);
WifiInfo info = manager.getConnectionInfo();
String macAddress = info.getMacAddress();

您还需要在清单中设置 ACCESS_WIFI_STATE 权限。

于 2011-06-02T02:15:38.357 回答
1

可以有许多帐户链接到该设备。您可以使用AccountManager来获取它们。例如,谷歌帐户上的电子邮件:

AccountManager am = AccountManager.get(this);

Account[] ac = am.getAccountsByType("com.google");

for (Account account : ac) {
  Log.d ("Account", ac.name);
}

或者,您可以使用android.os.Build.MODEL或类似的。

于 2011-06-01T21:30:13.590 回答
0

有关如何为安装您的应用程序的每个 Android 设备获取唯一标识符的详细说明,请参阅此官方 Android 开发人员博客帖子:

http://android-developers.blogspot.com/2011/03/identifying-app-installations.html

似乎最好的方法是让您在安装时自己生成一个,然后在重新启动应用程序时阅读它。

我个人认为这是可以接受的,但并不理想。Android 提供的标识符在所有情况下都不起作用,因为大多数标识符取决于手机的无线电状态(wifi 开/关、蜂窝开/关、蓝牙开/关)。其他像 Settings.Secure.ANDROID_ID 必须由制造商实现,不保证是唯一的。

以下是将数据写入安装文件的示例,该文件将与应用程序在本地保存的任何其他数据一起存储。

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();
    }
}
于 2011-08-02T03:19:21.050 回答
0

您可以获得Android手机的IMEI,它是唯一的,

getDeviceId()您可以使用Class的方法获取它TelephonyManager

注意:您需要在清单中添加权限:READ_PHONE_STATE

于 2011-06-01T21:18:22.503 回答