4

私は、Android マーケット向けのゲームをほぼ書き終えました。フルバージョンと半分のレベルの無料バージョンがあります。次の問題で同様の状況にある多くの人々を読んだことがありますが、満足のいく解決策が見つかりません。

私のアプリは別々ですが、データを共有したいです。せめてフルバージョンでも無料版の進捗データを読み取れるようにしてほしい。ユーザーが無料版を終了してから完全版をインストールする場合、ゲームの最初のステージは無料版と同じであり、進行状況を共有/マッピングする必要があるため、進行状況情報にアクセスする必要があります。

私が読んだことから、ゲームの進行状況を保存する最良の方法は、SharedPreferences を使用することです。これは私が行っていることであり、完全に機能しています。

データを共有する方法を探しているときに、両方の AndroidManifest.xml ファイルで同じ android:sharedUserId を同じ値に定義し、両方のアプリが同じキーで署名されていることを確認するのが最善の方法であると読みました。

Android の sharedUserId とは何ですか? また、どのように使用されますか?

複数のアプリ、同じデータ ディレクトリを共有

私はこれを行い、ApplicationInfoを使用して両方のアプリのuidを確認することで機能していることを確認しましたが、どちらも同じです。ただし、両方のアプリ (異なる時間に実行されている) から SharedPrefs を読み書きできること、および同じデータを読み書きできることを期待していました。しかし、残念ながら違います。これでアプリが同じ SharedPreferences を共有しない場合、同じ sharedUserId を指定してどのデータを共有しているのでしょうか?

さらに掘り下げた後、最初に他のアプリのコンテキストにアクセスする必要があると言う人もいるようです:

http://thedevelopersinfo.com/2009/11/25/getting-sharedpreferences-from-other-application-in-android/

別のアプリケーションから SharedPreferences を読み取ることができません

したがって、App2 が App1 のデータにアクセスできるようにするには、App2 のアクティビティで次のコードを作成します。

Context otherAppsContext = null;
try {
    otherAppsContext = createPackageContext("com.example.app1package",0);
} catch (NameNotFoundException e) {
}
SharedPreferences sharedPrefs = otherAppsContext.getSharedPreferences("TestShareData",Context.MODE_PRIVATE);

ただし、sharedPrefs にデータを要求すると、現在のアプリ (App1 ではなく App2) からのデータが返されます。

otherAppsContext 変数を調べると、それが何を与えているのかわかりません。App2 のパッケージ名である mBasePackageName プロパティがあります (間違っています)。ただし、App1 に関するデータが含まれているように見える mPackageInfo プロパティもあります。

自分が正しい方法で物事を行っているのか、何かが欠けているのか、それともこれがまったく正しい方法ではないのかはわかりません。2 つのアプリをリンクして、一方が他方の SharedPrefs を読み取れるようにしたいだけです。ほとんどのフル バージョンのアプリは、無料のアプリのデータにどのようにリンクしていますか?

どんな助けでも大歓迎です!

4

1 に答える 1

0

確かにこれはよく起こりますが、私は自分の問題を解決したかもしれないと思います.

私のアプリ (フル バージョンと無料バージョン) は両方とも、同じ名前で sharedPrefs に書き込んでいます。

SharedPreferences settings = getSharedPreferences( PREFS_NAME, 0 );

PREFS_NAME は両方のアプリで同じです。App2 から App1 のコンテキストを要求すると、コンテキストが返されますが、両方のアプリのデータにアクセスできるコンテキストのようです。

App2 から App1 のコンテキストを取得し、PREFS_NAME という名前の SharedPreferences を要求するときを説明するために、代わりに App2 から SharedPrefs を取得します。しかし、App1 の SharedPrefs 名を変更してから、App2 のコンテキストからそれにアクセスしようとすると、突然 App1 のデータが取得されます。

createPackageContext 呼び出しから何が返されているのか、よくわかりません。両方のデータセットへのハンドルのようです。しかし、必要に応じてアプリで SharedPrefs に別の名前を使用し、完全なアプリで無料アプリのデータを検索するだけでよいと思います。

于 2013-04-23T18:02:20.020 に答える