私は、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 を読み取れるようにしたいだけです。ほとんどのフル バージョンのアプリは、無料のアプリのデータにどのようにリンクしていますか?
どんな助けでも大歓迎です!