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 に答える