如何在Android应用中管理受限制的配置文件?

时间:2013-07-25 10:48:52

标签: android android-4.3-jelly-bean restricted-profiles

受限制的配置文件现在可以从4.3中获得,我开始知道某些应用程序,如相机,gmail等在这些类型的配置文件中不可用。如何在我的应用程序中管理这些类型的条件?还有如何管理应用程序产品和受限制的配置文件设置对应我的应用程序?

3 个答案:

答案 0 :(得分:5)

即使我已经访问过

,也要感谢user370305

http://developer.android.com/about/versions/android-4.3.html#RestrictedProfiles

我想通过

来改进它

https://www.youtube.com/watch?v=pdUcANNm72o

受限制的配置文件是Android Jelly Bean 4.3中引入的一项新功能,可让您在共享平板电脑时为您的应用程序用户提供更好的控制。

这些受限制的个人资料共享应用程序,主要用户帐户的Google帐户但限制使用。他们无法访问gmail,Play商店,日历等。主要用户可以为每个应用程序选择限制。

扩展了UserManager类以管理这些限制

UserManager.getUserRestrictions返回对用户指定的用户范围限制

对于给定的包名,

UserManager.getApplicationRestrictions将返回包含此用户的任何已保存应用程序限制的包。只有具有此包名称的应用程序才能调用此方法。

如果您需要特定设置,请使用此意图过滤器

<receiver android:name="GetRestrictionsReceiver">
<intent-filter>
<action android:name="android.intent.action.GET_RESTRICTION_ENTRIES "/>
</intent-filter>
</receiver>

现在实现广播接收器,其中包含像这样返回的限制条目列表

public  class GetRestrictionsReceiver extends BroadcastReceiver
    {

        @Override
        public void onReceive(Context context, Intent intent) {
            // TODO Auto-generated method stub
            final PendingResult result=goAsync();
            new Thread(){
                public void run(){
                    final Bundle extras=new Bundle();
                    ArrayList<RestrictionEntry> newEntries = initRestricions(context);
                    extras.putParcelableArrayList(Intent.EXTRA_RESTRICTIONS_LIST, newEntries);

                    result.setResult(Activity.RESULT_OK, null, extras);
                    result.finish();
                }

            }.start();

        }


    }

RestrictionEntry

任何选择公开此类限制的应用程序都是通过实现处理ACTION_GET_RESTRICTION_ENTRIES操作的接收器来实现的。接收器然后返回一个结果包,其中包含一个名为“restrictions”的条目,其值为ArrayList。

有3种类型的限制条目

  1. 布尔
  2. 单一选择
  3. 多项选择
  4. 您可以使用RestrictionEntry的不同方法来设置和获取不同类型的限制。

    要从受限制的配置文件访问帐户,您必须将android:restrictedAccountType属性添加到标记:

    <application ...
        android:restrictedAccountType="com.example.account.type" >
    

答案 1 :(得分:1)

用户控制您构建的限制的UI由系统的“设置”应用程序管理。要向用户显示应用的限制设置,您必须通过创建接收BroadcastReceiver意图的ACTION_GET_RESTRICTION_ENTRIES来声明应用提供的限制。系统调用此意图来查询所有应用程序的可用限制,然后构建UI以允许主用户管理每个受限制的配置文件的限制。

有关详细信息,请查看http://developer.android.com/about/versions/android-4.3.html#RestrictedProfiles

答案 2 :(得分:1)

您可以使用以下代码部分来检测您的应用是否在限制配置文件模式下运行!!

import android.content.pm.UserInfo;
import android.os.UserHandle;
import android.os.UserManager;

public static boolean isRestrictedProfileInEffect(Context context) {
  UserManager userManager = (UserManager) context.getSystemService(Context.USER_SERVICE);
  UserInfo restrictedUserInfo = null;
  for (UserInfo userInfo : userManager.getUsers()) {
        if (userInfo.isRestricted()) {
            restrictedUserInfo = userInfo;
        }
    }
  boolean isOwner = UserHandle.myUserId() == UserHandle.USER_OWNER;
  boolean isRestrictedProfileOn = restrictedUserInfo != null && !isOwner;
  return isRestrictedProfileOn;
}