2013-03-15 24 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