<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                UserManager是Andorid 4.0新增的一個功能,其作用是管理手機上的不同用戶。這一點和PC上的Windows系統比較相似,例如,在Windows上安裝程序時,都會提示是安裝給本人使用還是安裝給系統所有用戶使用。非常遺憾的是,在目前的Andorid版本中,該功能尚未完全實現,在SDK中也沒有相關說明。不過從現有代碼中,也能發現一些蛛絲馬跡。 * * * * * **提示**:小米手機的訪客模式和UserManager比較相似。 * * * * * 1. UserManager構造函數分析 在PKMS中,創建UserManager調用的代碼如下: ~~~ //mUserAppDataDir指向/data/app。該目錄中包含的是非系統APK文件 mUserManager = new UserManager(mInstaller,mUserAppDataDir); ~~~ **UserManager.java** ~~~ public UserManager(Installer installer, FilebaseUserPath) { this(Environment.getDataDirectory(), baseUserPath); mInstaller = installer; } UserManager(File dataDir, File baseUserPath) { //mUsersDir指向/data/system/users目錄 mUsersDir = new File(dataDir, USER_INFO_DIR); mUsersDir.mkdirs();//創建該目錄 mBaseUserPath = baseUserPath; FileUtils.setPermissions(mUsersDir.toString(), FileUtils.S_IRWXU|FileUtils.S_IRWXG |FileUtils.S_IROTH|FileUtils.S_IXOTH, -1, -1); //mUserListFile指向/data/system/user/userlist.xml mUserListFile = new File(mUsersDir, USER_LIST_FILENAME); readUserList();//解析userlist.xml文件 } ~~~ 此處不深入readUserList代碼了,只介紹其內部工作流程。 - userlist.xml保存每個用戶的id。 - readUserList到/data/system/users下解析id.xml,將最終得到的信息保存在UserInfo對象中。 原來用戶信息由UserInfo表達,下面是UserInfo的定義。 **UserInfo** ~~~ public class UserInfo implements Parcelable { //主用戶,全系統只能有一個這樣的用戶 publicstatic final int FLAG_PRIMARY = 0x00000001; //管理員,可以創建、刪除其他用戶信息 publicstatic final int FLAG_ADMIN =0x00000002; //訪客用戶 publicstatic final int FLAG_GUEST =0x00000004; publicint id; //id publicString name;//用戶名 publicint flags; //屬性標志 ......//其他函數 } ~~~ UserInfo信息比較簡單,筆者覺得UserManager的功能暫時還不能企業用戶的需求。感興趣的讀者不妨關注Android未來版本在此方面的變化。 2. installPackageForAllUsers分析 PKMS在掃描非系統APK的時候,每掃描完一個APK都會調用installPackageForAllUsers,調用代碼如下: `mUserManager.installPackageForAllUsers(pkgName,pkg.applicationInfo.uid);` **UserManager.java::installPackageForAllUsers** ~~~ public void installPackageForAllUsers(StringpackageName, int uid) { for (intuserId : mUserIds) { if(userId == 0) continue; //向installd發送命令,其中getUid將組合userId和uid為一個整型值 //installd將在/data/對應user/目錄下創建相應的package子目錄 mInstaller.createUserData(packageName, PackageManager.getUid(userId,uid), userId); } } ~~~
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看