1

背景:Android 提供了一种很好的数据备份方法。要在执行系统范围的备份时备份应用程序的数据,应用程序应在应用程序清单中指定一个备份代理作为其应用程序标记的属性。

<application android:label="MyApplication"
         android:backupAgent="MyBackupAgent">

问:我想为我正在创建的文件检索服务使用类似的机制。我的问题是,如何以编程方式扫描应用程序标签中具有给定属性的应用程序,并启动与该属性关联的对象?这可能吗?

请注意,目标应用程序可能不一定正在运行。

4

1 回答 1

1

我想通了。查看 Android 源代码后,我发现无法扩展标准标签的属性。相反,元数据可用于实现类似的结果。

我设计的解决方案是在我希望在我的服务中“注册”的应用程序中包含一个元数据标签。例如:

AndroidManifest.xml(目标应用程序)

<application
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name" >

    <meta-data android:name="MyAttribute" android:value="myvalue" />

我开发的服务会扫描已安装的软件包以查找具有相关元数据的软件包:

List<PackageInfo> packages = getPackageManager().getInstalledPackages(PackageManager.GET_META_DATA);
for (int a = packages.size();-1; a >= 0; a--) { 
    PackageInfo pkg = packages.get(a);       
    ApplicationInfo ai = packages.get(a).pkg.applicationInfo;
    boolean remove = true;
    if (ai.metaData != null && ai.metaData.get("LogRetrievalAgent") != null) {
    remove = ai.metaData.get("LogRetrievalAgent").toString().compareTo("test") != 0;
    }

    if (remove) {
        packages.remove(pkg);
    }
}
于 2012-04-25T11:49:25.160 回答