2013-04-23 100 views
4

我幾乎已經爲Android市場編寫了一款遊戲。我有一個完整版本和一半水平的免費版本。我讀過與下面的問題類似情況的人很多,但無法找到一個滿意的解決方案:在Android應用程序之間共享進度數據

我的應用程序是分開的,但我希望他們能共享數據。至少我希望完整版能夠讀取免費版本的進度數據。如果用戶完成免費版本,然後安裝完整版本,則需要訪問進度信息,因爲遊戲的第一階段與免費版本相同,應共享/映射進度。

從我已閱讀,保存遊戲進度的最好辦法是使用SharedPreferences,這是我在做什麼,它的工作完美。

在尋找共享數據的方式上我讀到最好的辦法是在兩個AndroidManifest.xml文件中定義相同的android:sharedUserId,使其具有相同的值,並確保兩個應用程序都使用相同的密鑰進行簽名:

What is sharedUserId in Android, and how is it used?

multiple apps, sharing same data directory

我已經做到了這一點,並檢查它的工作通過使用ApplicationInfo同時看到應用程序的UID的,這是相同的。但是,我期望能夠從兩個應用程序(在不同的時間運行)讀取和寫入SharedPrefs並讀取/寫入相同的數據。但唉,不。如果這不會使應用程序共享相同的SharedPreferences,那麼通過指定相同的sharedUserId來共享哪些數據?

後一些更多的挖一些人似乎在說我需要先訪問其他應用程序的情況下:

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

Can't read SharedPreferences fron another application

所以,如果我想應用2訪問應用1的數據,這給我App2的活動如下代碼:

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

但是,當我問數據sharedPrefs它仍然只給我從當前的應用程序(App2,而不是App1)的數據。

檢查otherAppsContext變量我不確定它給我什麼。它有一個mBasePackageName屬性,它是App2的包名(錯誤)。但它也有一個mPackageInfo屬性,它似乎包含有關App1的數據。

我只是不知道我是否以正確的方式做事,但是錯過了某些東西,或者如果這根本就不行。我只想連接我的2個應用程序,以便可以讀取其他人的SharedPrefs。大多數完整版本的應用程序如何鏈接到免費的數據?

任何幫助將不勝感激!

+0

您是否將進度數據存儲在外部存儲介質上? – 2013-04-23 16:29:43

+0

也許這是一種常見的做法,但實際上並沒有太多要保存,SharedPrefs一般運行良好。 – ManOfTomorrow 2013-04-23 18:32:05

回答

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使用不同的名稱,並讓完整的應用程序只需搜索免費應用程序的數據。

相關問題