Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何确定哪个用户安装了android应用程序?_Android_Multi User - Fatal编程技术网

如何确定哪个用户安装了android应用程序?

如何确定哪个用户安装了android应用程序?,android,multi-user,Android,Multi User,Android 4.2及以上版本的平板电脑支持多个用户。这意味着每个用户都可以拥有自己独立的应用程序集,这些应用程序将与其他用户分开。此外,如果用户A安装了应用程序,则当用户B登录时,该应用程序将不可用 因此,我的问题是,如果有一种方法可以确定在安装应用程序时使用PackageManager,我能知道是哪个用户实际安装了它吗?不幸的是,没有一种简单直接的方法来“识别”哪个用户安装了您的应用程序。唯一的替代方法是将用户与以下文件中所述的唯一Id关联: 通过在应用程序第一次启动时创建一个新的UUID

Android 4.2及以上版本的平板电脑支持多个用户。这意味着每个用户都可以拥有自己独立的应用程序集,这些应用程序将与其他用户分开。此外,如果用户A安装了应用程序,则当用户B登录时,该应用程序将不可用


因此,我的问题是,如果有一种方法可以确定在安装应用程序时使用PackageManager,我能知道是哪个用户实际安装了它吗?

不幸的是,没有一种简单直接的方法来“识别”哪个用户安装了您的应用程序。唯一的替代方法是将用户与以下文件中所述的唯一Id关联:

通过在应用程序第一次启动时创建一个新的UUID,无论有多少用户在一台设备上安装了应用程序,您都可以获得用于跟踪每个用户的唯一ID。

因此,尽管您可能无法通过某种凭据直接检索用户,但您可以使用()模拟自己的用户:


我找到了解决办法。获取用户信息的最佳方法是使用
UserManager
API。虽然有些API要求应用程序是系统应用程序,但我们可以获得有关当前用户名、用户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();
    }
}