2012-09-19 7 views
9

私はsharedpreferenceファイルを介してデバイスにインストールされている他のアプリケーションとやり取りするAndroidアプリケーションを開発しています。異なるアプリケーション間でAndroidの共有設定

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

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

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

しかし、私はそれを達成するためにいくつか問題があります。

はあなたが取得できると はその値を変更し、それを通してSharedPreferencesを返し、 を取得し、環境設定の内容は、「名前を」ファイルを保持:Androidのドキュメントに私がいることがわかります。 SharedPreferencesオブジェクトの1つのインスタンス は、同じ名前の呼び出し元に返されます。つまり、作成されるとすぐに が編集されます。

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

どのような考えですか?

I共有県である読み取るために使用しているコード【の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); 

Iアプリ共有県に書き込むための使用しているコードは:

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

ありがとうございます。

答えて

3

SharedPreferences are stored local to the package name of your application.あなたは、異なるパッケージ名の2つの完全に別々のアプリケーションがあります。つまり、別のフォルダに保存されている同じ名前の2つのファイルを作成することになります。異なるアクティビティが同一のSharedPreferencesファイルから読み取るには、AndroidManifestファイルで定義されているのと同じパッケージ名を使用する必要があります。

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

I believe I have found the answer you are looking for.

+0

はい、2つの異なるアプリケーションがあり、各アプリケーションには独自のshared_prefsフォルダに保存されている共有設定ファイルがあります。 はい、私はPackageManager経由で他のアプリケーションのパッケージ名を知っていますが、どのアクティビティ/クラスがそれを処理するかを知るオプションはありません。 私は既にそのリンクを見ていましたが、ここで問題となるのは、同じ名前の2つの異なる共有プリファレンスにアクセスすることです。 1つを開いた後、他のものを開くときに、最初に開かれた参照ポイントを参照し、参照ポイントはコンテキストとして送信されません。 – user1683087

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