Android APP之间共享SharedPreference

条件


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();

注意事项

  1. AB应用需要读写的配置文件名称必须一样,如上述代码中的”userId”,最终生成的文件名是userId.xml;
  2. 为了能实时读写,SharedPreferences的MODE必须加 MODE_MULTI_PROCESS,读和写模式看具体需求情况。
  3. SharedPreferences本质上也属于文件的一种,但是系统对它的读写有一定的缓存策略,即在内存中会有一份SharedPreferences文件的缓存,虽然可以用MODE_MULTI_PROCESS实现多进程模式,但是依然不可靠,面对高并发的读写访问,而且会有很大几率丢失数据,所以不是很建议在进程间通信使用它。

DEMO下载地址:点击下载
注意:生成的两个APK签名必须一致!

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值