2013-07-25 51 views
6

受限制的配置文件現在可以在4.3的Android中使用,我開始知道某些應用程序如攝像頭,gmail等在這些類型的配置文件中不可用。我如何在我的應用程序中管理這些類型的條件?還有如何管理應用產品和受限制的配置文件設置對應於我的應用程序?如何在Android應用程序中管理受限配置文件?

回答

1

用戶控制您構建的限制的UI由系統的「設置」應用程序管理。爲了讓您的應用程序的限制設置對用戶顯示,您必須通過創建BroadcastReceiver來聲明您的應用程序提供的限制,其中收到ACTION_GET_RESTRICTION_ENTRIES意圖。系統調用此意圖查詢所有應用程序的可用限制,然後構建UI以允許主要用戶管理每個受限配置文件的限制。

欲瞭解更多信息看http://developer.android.com/about/versions/android-4.3.html#RestrictedProfiles

5

由於即使我已經訪問過

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

我想從參考與

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

限制的個人資料改進user370305是Android Jell中引入的一項新功能y 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不同的方法來設置和獲取不同類型的限制。 restrictedAccountType屬性標籤:

爲了從受限個人資料存取的帳戶,則必須添加的Android

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

+1非常有幫助的概述! – rekire

+1

請確保您使用GET_RESTRICTION_ENTRIES而不是GET_RESTRICTIONS_ENTRIES,因爲我剛剛在此上浪費了幾個小時。 – RuAware

+0

@RuAware感謝您的修正 –

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; 
} 
相關問題