Android(安卓)APP之间共享SharedPreference
16lz
2021-01-24
条件
sharedUserId相同
我们知道,Android上的各个APP是用户分离的,每个APP都有不同的UserId,这种共享数据的方式要求这两个APP必须是相同的UserId。
在AndroidManifest.xml中的manifest标签,我们需要设置两个APP的sharedUserId,如下:
<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.xiechen.sourceapp" android:sharedUserId="xxcc.com"> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:supportsRtl="true" android:theme="@style/AppTheme"> <activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application></manifest>
签名一致
要用这种方式,两个APP的签名也要求一致,所以比较适用于属于自己的多个APP之间共享数据。
核心代码
假设有A和B两个应用,我们来实现AB之间实时的读取和写入userId。
A应用
private SharedPreferences mPreference;mPreference = getSharedPreferences("userId", MODE_WORLD_WRITEABLE | MODE_WORLD_READABLE| MODE_MULTI_PROCESS);// 写入EditText中的值SharedPreferences.Editor editor = mPreference.edit();editor.putString("userId", mValueET.getText().toString().trim());editor.commit();// 读取String userId = mPreference.getString("userId", "000");mResultTV.setText(userId);
B应用
private SharedPreferences mPreferences;private Context targetAPPContext;try { // 尝试创建A应用的Context targetAPPContext = createPackageContext("com.example.xiechen.sourceapp", CONTEXT_IGNORE_SECURITY); // 从A应用中取得配置文件 mPreferences = targetAPPContext.getSharedPreferences("userId", MODE_WORLD_WRITEABLE | MODE_WORLD_READABLE |MODE_MULTI_PROCESS); } catch (PackageManager.NameNotFoundException e) { e.printStackTrace(); }// 读取String userId = mPreferences.getString("userId", "000");// 写入SharedPreferences.Editor editor = mPreferences.edit();editor.putString("userId", mWriteET.getText().toString().trim());editor.commit();
注意事项
- AB应用需要读写的配置文件名称必须一样,如上述代码中的”userId”,最终生成的文件名是userId.xml;
- 为了能实时读写,SharedPreferences的MODE必须加 MODE_MULTI_PROCESS,读和写模式看具体需求情况。
- SharedPreferences本质上也属于文件的一种,但是系统对它的读写有一定的缓存策略,即在内存中会有一份SharedPreferences文件的缓存,虽然可以用MODE_MULTI_PROCESS实现多进程模式,但是依然不可靠,面对高并发的读写访问,而且会有很大几率丢失数据,所以不是很建议在进程间通信使用它。
DEMO下载地址:点击下载
注意:生成的两个APK签名必须一致!
更多相关文章
- Android(安卓)更新UI的两种方法——handler和runOnUiThread() -
- Android(安卓)RecyclerView简单运用
- Android(安卓)OpenGL ES(八)----纹理编程框架
- [置顶] android 心跳包的分析
- 浅析 - Android(安卓)ContentProvider用法示例
- Android(安卓)Native层开发Camera应用的方法
- Android使用Google提供的地图实现定位时LocationListener的各个
- Android之Activity的生命周期和Activity间的跳转和数据传递
- android 本地数据库sqlite的封装