10

私は、共有設定ファイルを介してデバイスにインストールされている他のアプリケーションと対話するAndroidアプリケーションを開発してきました。

このファイルはMODE.WORLD_READABLEとして作成され、インストールされているすべてのアプリケーションには、共通の定義済みの名前とプロパティ(その特定のプロパティの値が変更される)を持つ独自のファイルがあります。

たとえば、AppAとAppBには、それぞれプロパティ「property_shared_file」を持つ「app_shared_file.xml」という名前の共有ファイルが必要です。

私のアプリケーションから、最初にこのファイルにアクセスしてそのプロパティ値を読み取り、その結果に応じて私のものを作成/更新したいと思います。

それにもかかわらず、私はそれを達成するのにいくつかの問題を抱えています。Androidのドキュメントでは、次のことがわかります。

設定ファイル'name'の内容を取得して保持し、その値を取得および変更できるSharedPreferencesを返します。SharedPreferencesオブジェクトの1つのインスタンスのみが、同じ名前の呼び出し元に返されます。つまり、呼び出し元は、編集が行われるとすぐにお互いの編集を確認できます。

他のアプリケーション共有設定ファイルを読んだ後、私のものを編集する代わりにシステムを作成/更新しようとすると、以前に読んだものを使用しています。それどころか、私が私のものを更新することから始めて、後で他のアプリを読む場合-他のアプリを読む代わりに、アクセスされているのは私のものです。

何かご意見は?

共有設定を読み取るために使用しているコードは、[packageNameは他のアプリpckgです]です。

Context con = context.createPackageContext(packageName, Context.CONTEXT_IGNORE_SECURITY);
SharedPreferences pref = con.getSharedPreferences(SHARED_PREF_NAME, Context.MODE_WORLD_READABLE);
pref.getBoolean(SHARED_PREF_PROP, false);

アプリの共有設定での書き込みに使用しているコードは次のとおりです。

SharedPreferences prefs= getSharedPreferences(SHARED_PREF_NAME, context.MODE_WORLD_READABLE);
SharedPreferences.Editor editor = prefs.edit();
editor.putBoolean(SHARED_PREF_PROP, value); 
editor.commit();

前もって感謝します。

4

2 に答える 2

3

SharedPreferences は、アプリケーションのパッケージ名に対してローカルに保存されます。 見た目からすると、パッケージ名が異なる 2 つの完全に別個のアプリがあります。これは、1 つのファイルから読み取るのではなく、異なるフォルダーに保存されている同じ名前の 2 つのファイルを作成していることを意味します。異なるアクティビティが同じファイルから読み取るためにはSharedPreferences、ファイルで定義されているのと同じパッケージ名でアクティビティを実行する必要がありAndroidManifestます。

もう 1 つのオプションは、他のアプリケーションのパッケージ名を知っているので (私が推測します)、それを作成して処理するメイン アプリを選択することです。次に、直接 URI を使用してファイル自体から直接読み取ります。アクセス許可を に設定しているためMODE_WORLD_READABLE、システムはこれを許可する必要があります。ただし、フォルダー自体へのアクセスがブロックされる可能性があります。私は個人的に試したことはありません。

私はあなたが探している答えを見つけたと信じています。

于 2012-09-19T13:15:06.893 に答える
0

このスニペットを使用して、他のアプリから設定を読み取ることができます。

String PACKAGE_NAME = "com.gr.iasi";
String PREFERENCE_NAME = "GlobalPrefsJorge";


try {
        myContext = createPackageContext(PACKAGE_NAME,Context.MODE_WORLD_WRITEABLE);             
          SharedPreferences testPrefs = myContext.getSharedPreferences(PREFERENCE_NAME, Context.MODE_WORLD_READABLE); 

        Map<String, ?> items = testPrefs .getAll();
        for(String s : items.keySet()){
             //Print keys and values;
            Log.i("***" +s.toString(), items.get(s).toString());
          }

        } catch (NameNotFoundException e) {     
            e.printStackTrace();
        }
于 2013-05-23T22:49:31.737 に答える