2013-04-23 105 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使用不同的名称,并让完整的应用程序只需搜索免费应用程序的数据。

相关问题