6

私の Android アプリケーションでは、別の Android アプリケーションの共有データを読み取り、そのデータを共有設定から削除するようにコーディングしました。次のように私のコード:

try {

     con = createPackageContext("com.testapp.ws", 0);
     SharedPreferences pref = con.getSharedPreferences("demopref", Context.MODE_PRIVATE);
     ipAdr = pref.getString("demostring", "No Value");
     pref.edit().remove("demopref").commit();
   }

これは、次のエラーを示しています。

06-12 11:52:07.400: E/ApplicationContext(3587): Couldn't rename file /data/data/com.testapp.ws/shared_prefs/demopref.xml to backup file /data/data/com.testapp.ws/shared_prefs/demopref.xml.bak

他のアプリケーションでこのメソッドを使用して共有データを作成しました

 public void shareData(){
    String strShareValue = ip;
    SharedPreferences prefs = getSharedPreferences("demopref",Context.MODE_WORLD_READABLE);
    SharedPreferences.Editor editor = prefs.edit();
    editor.putString("demostring", strShareValue);
    editor.commit();
}

どうやってやるの ?マニフェストファイルに追加するものはありますか?

ありがとう!

4

4 に答える 4

4

マニフェスト ファイルでandroid:sharedUserIdを使用すると、機能するはずです。これは、私が自分自身に遭遇した権限の問題です。

これを行うには、両方のアプリケーションのファイル内のタグになどのタグを追加するだけandroid:sharedUserId="com.example.you"です(もちろん、両方のアプリで が同じである必要があります)。<manifest>AndroidManifest.xmlcom.example.you

マニフェスト ファイルの開始例:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="package.name"
    android:versionCode="1"
    android:versionName="1.0"
    android:sharedUserId="com.example.you" >
...

これを機能させる方法の詳細な説明については、 How can I share a SharedPreferences file across two different Android apps?に関する私の回答を参照してください。

于 2012-06-13T18:19:55.900 に答える
1

ここにある他のソリューションは技術的にはほとんどの状況で機能しますが、プロセス/アプリケーション間でデータを共有するために Android が提供するフレームワークはContentProvider. 余分な抽象化がたくさんあるように見えるかもしれませんが、確実に動作することが保証されています。

このコンポーネントのインターフェイスは呼び出しをデータベースにミラーリングしますが、基になるデータ構造は好きなものにすることができます。具体的にMatrixCursorは、オブジェクトのコンテンツを提供するクエリに応答して を返すSharedPreferencesことができ、他のアプリケーションから設定を変更するために使用できる削除/更新呼び出しの URI スキームを実装できます。

これは、設定を共有していた別の開発者のブログ投稿へのリンクです。MatrixCursor

HTH

于 2012-06-13T19:08:00.170 に答える
1

過去 3 日間、SharedPreferences に苦労していましたが、ようやく自分で解決できたと思います。ここでは、あなた (および他の多数の stackoverflow ユーザー) に役立つかもしれない、試してみるべきいくつかのヒントと落とし穴を示します。

私の観察結果はすべてICS (4.0.2 および 4.0.4) に関するものであることに注意してください。

  1. を変更するandroid:sharedUserIdと、ファイル/フォルダーのアクセス許可が正しくなくなるため、アプリを削除します。そのため、アプリを既にリリースしている場合は、その値を変更しないでください。
  2. Context.MODE_*値を変更する場合は、アプリのデータ(またはアプリ全体) を削除して、ファイルのアクセス許可が正しくないようにしてください。
  3. を使用する場合はandroid:sharedUserId、必ず同じ証明書でアプリに署名してください。
  4. 2 つのアプリの設定には別のファイル名を使用してください。を使用したにもかかわらず、アプリがローカルの共有設定を読み取るだけで問題が発生しましたcreatePackageContex()

これは最終的に私のために働いたものです:

  1. android:sharedUserId2つのアプリに同じものを使用しました。(同じではありませんandroid:process。)
  2. Context.MODE_WORLD_READABLEローカル設定の読み取りと書き込みの両方、および他のアプリの設定の読み取りに使用しました。
  3. Context.CONTEXT_IGNORE_SECURITY電話するときに使いましたcreatePackageContext()
于 2012-06-13T19:28:02.740 に答える
1

MODE_WORLD_READABLEの代わりに使用する必要がありますMODE_PRIVATE。詳細については、ドキュメントを参照してください。

さらに間違いがないかどうかをさらに確認するためのチュートリアルを次に示します。

于 2012-06-13T18:14:30.107 に答える