Создание постоянного UUID приложения в Android при установке приложения

Мне нужно различать установки моего приложения, поэтому я создаю UUID в своем приложении через java.util.UUID.randomUUID(), а затем сохраняю его как String в общих настройках. Однако, когда я перехожу в настройки телефона, управляю приложениями, щелкаю свое приложение и нажимаю «Очистить данные», при следующем запуске моего приложения создается новый UUID. Я считаю, что это потому, что предыдущие общие настройки были удалены.

Есть ли способ создать UUID, который сохраняется до тех пор, пока приложение установлено, даже когда в настройках нажата кнопка «Очистить данные»?


person MLQ    schedule 25.09.2012    source источник
comment
Почему вы не используете код IMEI телефона? Таким образом вы сможете уникальным образом идентифицировать устройство.   -  person Tomas Narros    schedule 25.09.2012
comment
Если на устройстве нет 3G или 4G, код IMEI практически не будет существовать, как описано в stackoverflow.com/a/ 6699237/855680.   -  person MLQ    schedule 25.09.2012


Ответы (1)


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

person Royston Pinto    schedule 25.09.2012
comment
Я не знаю файловую систему Android, есть ли папка, в которую вы бы порекомендовали написать этот отдельный файл? - person MLQ; 25.09.2012
comment
Вы можете сделать что-то вроде этого, File f = new File (Environment.getExternalStorageDirectory () + / Folder); f.mkdirs (); Это создаст новую папку, затем вы создадите файл и запишете в него. Вам нужен код для этого? я могу предоставить это здесь - person Royston Pinto; 25.09.2012
comment
Это сложно, правда? Потому что на телефоне или планшете может не быть внешнего запоминающего устройства. Может внутреннее хранилище? - person MLQ; 25.09.2012
comment
Android всегда предоставляет раздел с именем / sdcard /, несмотря на то, что к нему может не подключаться внешнее хранилище. Файловая система разделена таким образом, что это пространство видно всем приложениям с использованием разрешения WRITE_EXTERNAL_STORAGE. - person Royston Pinto; 25.09.2012
comment
Но если приложение будет удалено, смогу ли я удалить этот файл или каталог? Потому что в противном случае старый UUID будет там, когда приложение будет переустановлено. Для каждой новой установки должен быть новый UUID. - person MLQ; 25.09.2012
comment
Этот файл не будет удален во время деинсталляции. Так что вам нужно будет найти выход, чтобы определить, самый последний он или нет. - person Royston Pinto; 25.09.2012
comment
У вас есть предложения, как определить, последняя ли она? Я только что попробовал ваше предложение и теперь снова зашел в тупик. Даже если я запишу файл в папку sdcard, у меня по-прежнему нет возможности реагировать на события установки или удаления, поэтому я не могу пометить файл как новый или старый. - person MLQ; 25.09.2012
comment
Да, я понял, это действительно сложно узнать, когда вы будете удалены, а затем установлены обратно .. вы можете сохранить файл конфигурации с полями, чтобы помочь вам понять, нужно ли вам регенерировать новый UUID. Но это сложно, я согласен - person Royston Pinto; 25.09.2012
comment
Думаю, это самый близкий ответ, который я могу найти. Во всяком случае, я уже начал смотреть на AccountManager. - person MLQ; 25.09.2012