4

で利用可能なものよりも多くの情報を必要とする Android アプリケーションに取り組んでいますPackageManager(インテント フィルターなど)。AndroidManifest.xmlAndroidManifest ファイルを読み取るためのパーサーを作成しましたが、インストールされているアプリケーションの場所が見つかりません。私が使用しているコードは次のとおりです。

int flags = PackageManager.GET_ACTIVITIES
                       //| PackageManager.GET_CONFIGURATIONS
                       //| PackageManager.GET_DISABLED_COMPONENTS
                       //| PackageManager.GET_GIDS
                       //| PackageManager.GET_INSTRUMENTATION
                       //| PackageManager.GET_INTENT_FILTERS //Not needed (see BUG: http://code.google.com/p/android/issues/detail?id=3217)
                       | PackageManager.GET_META_DATA
                       | PackageManager.GET_PERMISSIONS
                       | PackageManager.GET_PROVIDERS
                       | PackageManager.GET_RECEIVERS
                       | PackageManager.GET_RESOLVED_FILTER
                       | PackageManager.GET_SERVICES
                       | PackageManager.GET_SHARED_LIBRARY_FILES
                       | PackageManager.GET_SIGNATURES
                       | PackageManager.GET_UNINSTALLED_PACKAGES
                       | PackageManager.GET_URI_PERMISSION_PATTERNS;
final PackageInfo pkg = pm.getPackageInfo(info.packageName, flags);
File manifest = new File(pkg.applicationInfo.publicSourceDir + "/AndroidManifest.xml");
if (manifest.exists()) {
    //Code never reaches this point
}

ドキュメントによると、ApplicationInfo.publicSourceDirは次のとおりです。

このパッケージの一般に公開されている部分 (つまり、プライマリ リソース パッケージとマニフェスト) の場所へのフル パス。前方ロックされていないアプリの場合、これは {@link #sourceDir) と同じになります。

私は何を間違っていますか、またはどうすればこれを正しく行うことができますか?

4

3 に答える 3

1

ここにコード:

AssetManager am = yourContext.createPackageContext("packageName", 0).getAssets();

XmlResourceParser xml = am.openXmlResourceParser("AndroidManifest.xml");

しかし、それを解析する必要があります。

于 2011-12-20T07:22:26.477 に答える
1

長い時間がかかりましたが、私はそれを理解しました。マニフェストなどのアセットは圧縮されています。この記事を参照してください。圧縮されていない場合は、@gwa (またはそれに類似したもの) によって提供されたコードでうまくいきます。

于 2011-12-20T19:56:15.803 に答える
0

あなたのアプリにはそれを読むための十分な権限がないと思います。ルート化されたデバイスで試してください。

于 2011-12-20T07:13:40.313 に答える