受限配置文件现在可在 4.3 的 android 中使用,我了解到某些应用程序(如相机、gmail 等)在此类配置文件中不可用。我如何在我的应用程序中管理这些类型的条件?另外,如何管理与我的应用程序相对应的应用程序产品和受限配置文件设置?
3 回答
感谢 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();
}
}
任何选择公开此类限制的应用程序都是通过实现处理 ACTION_GET_RESTRICTION_ENTRIES 操作的接收器来实现的。然后接收器返回一个结果包,其中包含一个名为“restrictions”的条目,其值为 ArrayList。
限制条目有 3 种类型
- 布尔值
- 单选
- 多项选择
您可以使用 RestrictionEntry 的不同方法来设置和获取不同类型的限制。
要从受限配置文件访问帐户,您必须将 android:restrictedAccountType 属性添加到标记:
<application ...
android:restrictedAccountType="com.example.account.type" >
用户控制您已构建的限制的 UI 由系统的设置应用程序管理。要使您的应用程序的限制设置显示给用户,您必须通过创建一个BroadcastReceiver
接收ACTION_GET_RESTRICTION_ENTRIES
意图的应用程序来声明您的应用程序提供的限制。系统调用此意图来查询所有应用程序的可用限制,然后构建 UI 以允许主要用户管理每个受限配置文件的限制。
有关更多信息,请查看http://developer.android.com/about/versions/android-4.3.html#RestrictedProfiles
您可以使用以下代码部分来检测您的应用程序是否在受限配置文件模式下运行!
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;
}