2012-04-25 12 views
1

背景:Androidはデータをバックアップする優れた方法を提供します。システム全体のバックアップが実行されるたびにアプリケーションのデータをバックアップするには、アプリケーションマニフェストに、アプリケーションタグの属性として指定されたバックアップエージェントが必要です。Android:実行していないアプリケーションをサービスに登録するにはどうすればよいですか?

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

質問:私が作成しているファイル検索サービスにも同様のメカニズムを使用したいと思います。私の質問は、アプリケーションタグ内の特定の属性を持つアプリケーションをプログラムでスキャンし、その属性に関連付けられたオブジェクトを起動する方法です。これは可能ですか?

ターゲットアプリケーションが必ずしも実行されていない可能性があります。

答えて

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); 
    } 
} 
関連する問題