在Android应用之间共享进度数据

时间:2013-04-23 16:27:44

标签: android sharedpreferences

我差点为Android市场编写游戏。我有一个完整版本和一半级别的免费版本。我已经阅读过很多处于类似情况的人,但是找不到令人满意的解决方案:

我的应用是独立的,但我希望他们共享数据。至少我希望完整版能够读取免费版的进度数据。如果用户完成免费版本,然后安装完整版,则需要访问进度信息,因为游戏的第一阶段与免费版本相同,并且应该共享/映射进度。

从我所看到的,保存游戏进度的最佳方法是使用SharedPreferences,这正是我正在做的事情并且它的工作正常。

在搜索共享数据的方法时,我读到最好的办法是将两个AndroidManifest.xml文件中的相同android:sharedUserId定义为相同的值,并确保两个应用程序都使用相同的密钥进行签名: / p>

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

因此,如果我希望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询问数据时,它仍然只是从当前应用程序(App2而不是App1)中提供数据。

检查otherAppsContext变量我不确定它给了我什么。它有一个mBasePackageName属性,它是App2的包名(错误)。但它也有一个mPackageInfo属性,它似乎包含有关App1的数据。

我只是不知道我是否以正确的方式做事但是我错过了什么,或者这根本不是什么方法。我只是想以这样的方式链接我的2个应用程序,以便可以读取其他的SharedPrefs。大多数完整版应用程序如何链接到免费的数据?

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:0)

当然这种情况发生了很多,但我想我可能已经解决了自己的问题。

我的两个应用程序(完整版和免费版)都以相同的名称写入sharedPref:

SharedPreferences settings = getSharedPreferences( PREFS_NAME, 0 );

两个应用的PREFS_NAME相同。当我从App2请求App1的Context时,它给了我一个Context但是它似乎是一个可以访问这两个Apps数据的Context?

为了解释当我从App2获取App1的Context并请求提供名称PREFS_NAME的SharedPreferences时,我从App2获取SharedPrefs。但是我尝试更改App1的SharedPrefs名称,然后从App2中的上下文中访问它,然后突然它获取了App1的数据。

我真的不知道我从createPackageContext调用中得到什么,它似乎是两组数据的句柄。但我想我可以让我的应用程序为SharedPrefs使用不同的名称,并让完整的应用程序只是在需要时搜索免费应用程序的数据。

相关问题