【问题标题】:How to manage restricted profiles in android app?如何在 Android 应用中管理受限配置文件?
【发布时间】:2013-07-25 05:21:01
【问题描述】:

从 4.3 开始,Android 现在可以使用受限配置文件,我了解到某些应用程序(如相机、gmail 等)在此类配置文件中不可用。如何在我的应用程序中管理这些类型的条件?另外,如何管理与我的应用相对应的应用产品和受限配置文件设置?

【问题讨论】:

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


    【解决方案1】:

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

    更多信息请查看http://developer.android.com/about/versions/android-4.3.html#RestrictedProfiles

    【讨论】:

      【解决方案2】:

      感谢user370305,即使我已经访问过

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

      我想通过参考改进它

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

      Restricted Profiles 是 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. 多选

      您可以使用 RestrictionEntry 的不同方法来设置和获取不同类型的限制。

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

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

      【讨论】:

      • 确保你使用 GET_RESTRICTION_ENTRIES 而不是 GET_RESTRICTIONS_ENTRIES,因为我刚刚在这上面浪费了几个小时。
      • NP,你可以看看stackoverflow.com/questions/18022586/…,它没有加载已经设置的设置,只是默认设置。
      【解决方案3】:

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

      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;
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-10-19
        • 2021-07-25
        • 1970-01-01
        • 2018-04-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多