11

マルチユーザー機能を備えたタブレット用の最新の Android バージョン (4.2.1 API レベル 17) でアプリを開発しています。

特定の機能 (アプリの設定へのアクセスなど) をタブレットの所有者 (つまり、他のユーザー アカウントを追加および削除できるユーザー) に制限したい

現在のユーザーが所有者であるかどうかを確認する方法はありますか?

UserManager と UserHandle API のドキュメントを読みましたが、チェックできる関数が見つかりませんでした。

私は何かを逃しましたか、それを行う別の方法はありますか?

4

3 に答える 3

15

同様ですが、反射はありません:

static boolean isAdminUser(Context context)
{
    UserHandle uh = Process.myUserHandle();
    UserManager um = (UserManager) context.getSystemService(Context.USER_SERVICE);
    if(null != um)
    {
        long userSerialNumber = um.getSerialNumberForUser(uh);
        Log.d(TAG, "userSerialNumber = " + userSerialNumber);
        return 0 == userSerialNumber;
    }
    else
        return false;
}
于 2013-03-16T10:25:36.760 に答える
2

さらに調査した結果、マルチユーザー API はまだ機能していないことがわかりました。実際には何にも使用できません。ただし、リフレクションを使用してユーザーが所有者であるかどうかを確認するためのハックがあります。

public boolean isCurrentUserOwner(Context context)
{
    try
    {
        Method getUserHandle = UserManager.class.getMethod("getUserHandle");
        int userHandle = (Integer) getUserHandle.invoke(context.getSystemService(Context.USER_SERVICE));
        return userHandle == 0;
    }
    catch (Exception ex)
    {
        return false;
    }
}

これは、Android 4.2.1を搭載したNexus 7およびNexus 10で機能します。非常に汚いです。したがって、デバイスとバージョン固有のアプリを作成していない限り、使用することはお勧めしません

于 2013-02-07T11:36:31.340 に答える