Как определить, какой пользователь установил андроид-приложение?

С Android 4.2 и выше на планшетах поддерживается несколько пользователей. Это означает, что у каждого пользователя может быть свой отдельный набор приложений, который будет храниться отдельно от других пользователей. Кроме того, если пользователь А устанавливает приложение, оно будет недоступно при входе пользователя Б.

Итак, мой вопрос: если есть способ определить использование PackageManager при установке приложения, могу ли я узнать, какой пользователь фактически установил его?


person Royston Pinto    schedule 28.04.2014    source источник


Ответы (2)


К сожалению, не существует простого и прямого способа «определить», какой пользователь установил ваше приложение. Единственная альтернатива — связать пользователя с уникальным идентификатором, как указано в документации. :

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

Поэтому, хотя вы не сможете получить пользователя напрямую с помощью каких-либо учетных данных, вы можете имитировать свои собственные с помощью(код здесь):

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();
    }
}
person AmmarCSE    schedule 28.04.2014

Я нашел решение. Лучший способ получить информацию о пользователе — использовать UserManager API. Хотя некоторые API требуют, чтобы приложение было системным, мы можем получить всю информацию о текущем имени пользователя, идентификаторе пользователя и т. д.

person Royston Pinto    schedule 30.04.2014