Найти уникальное имя устройства? - PullRequest
0 голосов
/ 02 июня 2011

Я разрабатываю приложение, которое использует zeroconf (bonjour) для обнаружения устройств - поэтому мне нужно дать каждому устройству Android какое-то имя (не просто набор цифр и букв, а что-то значимое, например, «Устройство Алекса»),В iOS это легко сделать - это возможно в Android?

Ответы [ 4 ]

1 голос
/ 02 июня 2011

С устройством может быть связано много аккаунтов. Вы можете использовать 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 голос
/ 02 июня 2011

Если ваше приложение требует, чтобы устройство имело сетевое подключение, вы можете попробовать использовать MAC-адрес устройства, который должен быть уникальным для всех пользователей.Это можно получить с помощью класса WifiInfo:

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

Вам также необходимо установить разрешение ACCESS_WIFI_STATE в своем манифесте.

0 голосов
/ 02 августа 2011

Подробные инструкции о том, как получить уникальный идентификатор для каждого устройства Android, с которого установлено приложение, см. В официальном сообщении блога разработчиков Android:

http://android -developers.blogspot.com / 2011/03 / идентифицирующий-приложение-installations.html

Похоже, что лучший способ - это создать свой собственный файл после установки и затем прочитать его при повторном запуске приложения.

Лично я считаю это приемлемым, но не идеальным. Ни один идентификатор, предоставляемый Android, не работает во всех случаях, так как большинство из них зависят от состояния радиосвязи телефона (вкл / выкл wifi, вкл / выкл сотовой связи, вкл / выкл bluetooth). Другие, такие как 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();
    }
}
0 голосов
/ 02 июня 2011

вы можете получить IMEI телефона Android, он уникален,

Вы можете получить его, используя метод getDeviceId() класса TelephonyManager

ПРИМЕЧАНИЕ: вам необходимо добавить разрешение в манифест: READ_PHONE_STATE

...