2013-03-15 16 views
2

問題:如何編寫關於包的元信息或安裝意圖在PackageManagerService在Android源代碼處理? (說明如下)Android套件安裝過程中寫元信息

我正在修改Android源以在安裝期間保存一些有關軟件包的元信息。它可以存儲在任何位置,但必須由系統讀取。我的第一次嘗試是使用/sdcardAndroid source error reading file from sdcard)但由於權限,這似乎不起作用。

現在,我想能夠將元信息發送到PackageManagerService,以便它可以在安裝之前編寫它。如果它自己寫入,它應該能夠在以後閱讀。

我已經確定了點PackageInstallerActivity,其中安裝意圖提高的地方:

if(v == mOk) { 
      // Start subactivity to actually install the application 
      Intent newIntent = new Intent(); 
      newIntent.putExtra(PackageUtil.INTENT_ATTR_APPLICATION_INFO, 
        mPkgInfo.applicationInfo); 
      newIntent.setData(mPackageURI); 
      newIntent.setClass(this, InstallAppProgress.class); 
      String installerPackageName = getIntent().getStringExtra(Intent.EXTRA_INSTALLER_PACKAGE_NAME); 
      if (installerPackageName != null) { 
       newIntent.putExtra(Intent.EXTRA_INSTALLER_PACKAGE_NAME, installerPackageName); 
      } 
      if(localLOGV) Log.i(TAG, "downloaded app uri="+mPackageURI); 

我可以把一個「額外」的意圖,但我不知道在哪裏的PackageManagerService這意圖被處理。

所以,問題:安卓意圖在android源代碼中的PackageManagerService中處理?

回答

2

正如你所看到的,意圖是一個明確的意圖與組件:InstallAppProgress.class

因此,意圖將首先由InstallAppProgress處理。它也是PackageInstaller中的一個組件。它負責顯示安裝進度(InstallAppProgress.java中的initView())。而在initView()方法,它會調用PackageManagerService:

@Override 
public void onCreate(Bundle icicle) { 
    super.onCreate(icicle); 
    Intent intent = getIntent(); 
    mAppInfo = intent.getParcelableExtra(PackageUtil.INTENT_ATTR_APPLICATION_INFO); 
    mPackageURI = intent.getData(); 
    initView(); 
} 

public void initView() { 
    ... 
    String installerPackageName = getIntent().getStringExtra(
      Intent.EXTRA_INSTALLER_PACKAGE_NAME); 
    PackageInstallObserver observer = new PackageInstallObserver(); 
    pm.installPackage(mPackageURI, observer, installFlags, installerPackageName); 
} 

因此,意圖不被PackageManagerService處理,它是由InstallAppProgress處理,那麼它只需撥打PackageManagerService安裝該應用程序。

我曾經在Android上使用部分權限授予系統。我所做的是在PMS中爲installPackage方法添加一個參數,所以我認爲你也可以這樣做。 PackageManager是一個aidl服務,所以你也需要修改aidl文件。它在framework/base/core/java/android/content/pm/

+0

謝謝。我確實在早些時候探討過這個問題,但我認爲我比進程間跳轉更早地調用了該函數,因此拒絕了權限。現在再試一次,看看它是怎麼回事。將在此處發佈更新。 – recluze 2013-03-15 12:59:16

+0

完美。最後讓它工作。您需要使用AIDL暗示的進程間跳轉。再次感謝。 – recluze 2013-03-15 14:56:42