条件

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. Android(安卓)更新UI的两种方法——handler和runOnUiThread() -
  2. Android(安卓)RecyclerView简单运用
  3. Android(安卓)OpenGL ES(八)----纹理编程框架
  4. [置顶] android 心跳包的分析
  5. 浅析 - Android(安卓)ContentProvider用法示例
  6. Android(安卓)Native层开发Camera应用的方法
  7. Android使用Google提供的地图实现定位时LocationListener的各个
  8. Android之Activity的生命周期和Activity间的跳转和数据传递
  9. android 本地数据库sqlite的封装

随机推荐

  1. Android中实现Gallery 点击放大
  2. Android缓存机制——一般存储实现
  3. ListView.setOnItemClickListener无效
  4. Android(安卓)stuido 中使用androidx.fra
  5. 【Android获取图片资源的4种方式】
  6. 如何解决Android(安卓)Emulator显示窗口
  7. Android(安卓)StudioGradle 一键快速打包
  8. Android中BindService方式使用的理解
  9. 2017-3-28(React-Native与Android原生代
  10. Android菜鸟日记19-图片旋转