`

SharedPreferences跨应用跨进程获取数据(附件)

阅读更多

在做一个应用的时候,该应用本来是和桌面放在一起的,后来不得不分开,但是桌面部分需要获取该应用的数据,就是该应用切换数据,然后发送广播给桌面程序,桌面程序获取该应用的数据!

需要的数据不多,所以之前该应用融合在桌面的时候就是使用的SharePreferences保存,但是现在分开了,就要跨进程了,要么就用ContentProvider结合SQLite将数据暴漏给桌面程序(但是需要的数据很简单,所以觉得用这种方式太麻烦了),要么操作相同的一个文档(可能被其他程序更改,不安全),要么继续使用SharePreferences。

但是之前使用的SharePreferences都是使用模式Context.MODE_PRIVATE,这样就不能被其他程序访问到,开始一直以为这样的文档只能被本应用使用,后来查了很多资料发现使用不同的模式可以实现跨进程,跨应用获取该文件内容(写了个demo来测试一下,见附件):

 

程序ShareDataB相当于一个主程序,只用来获取客户端程序ShareDataA中SharePreferences的数据。

程序a点击按钮来切换数据:

SharedPreferences share = getSharedPreferences(SHARED_FILE_NAME, Context.MODE_WORLD_READABLE);
                boolean preBooleanValue = share.getBoolean(SHARED_FILE_BOOLEAN_VALUE, false);// 得到之前的值
                // 更改share里的值
                share.edit().putBoolean(SHARED_FILE_BOOLEAN_VALUE, !preBooleanValue).commit();// 改变值
                boolean afterBooleanValue = share.getBoolean(SHARED_FILE_BOOLEAN_VALUE, false);// 得到之前的值
                mValueText.setText(afterBooleanValue + "");

 而程序b则在onresume的时候获取程序a中数据:

private static final String TARGET_PACKAGE_NAME = "com.example.sharedataa";// 目标数据程序的包名,
/**
     * 根据目标程序的包名来获取其程序的上下文
     * @return
     * @throws NameNotFoundException
     */
    private Context getTargetContext() throws NameNotFoundException {
        return createPackageContext(TARGET_PACKAGE_NAME, Context.CONTEXT_IGNORE_SECURITY);
    }

 

/**
     * Context.MODE_MULTI_PROCESS一定要添加,按理说只要Context.MODE_WORLD_READABLE 即可
     * <p>
     * 但是,如果只有Context.MODE_WORLD_READABLE 的话,即使另一个程序改变了值,这个程序得到的值永远都是第一次获取的值
     * <p>
     * 不会随着其他程序改变而改变
     */
    @Override
    protected void onResume() {
        super.onResume();
        try {
            SharedPreferences share = getTargetContext().getSharedPreferences(SHARED_FILE_NAME,
                    Context.MODE_WORLD_READABLE | Context.MODE_MULTI_PROCESS);
            boolean afterBooleanValue = share.getBoolean(SHARED_FILE_BOOLEAN_VALUE, false);// 得到之前的值
            mBooleanValueText.setText(afterBooleanValue + "");
        } catch (NameNotFoundException e) {
            e.printStackTrace();
            mBooleanValueText.setText("木有找到该包名");
        }
    }

 


 
 

  • 大小: 38.7 KB
  • 大小: 40.2 KB
分享到:
评论

相关推荐

    SharedPreferences跨应用读取数据的源程序

    在Android开发中,...通过这两个示例项目,开发者可以学习到如何在Android中使用SharedPreferences进行数据存储,以及如何实现跨应用的数据共享。理解并熟练运用这些知识点对于创建功能丰富的Android应用至关重要。

    Android-通过注解生成SharedPreferences包装类解决跨进程数据访问不同步的问题

    总之,通过注解生成SharedPreferences包装类是一种有效的解决跨进程数据访问不同步的方法。它提高了代码的可维护性和安全性,简化了多进程环境下的数据管理。在实际开发中,我们可以根据需求自定义注解和处理器,以...

    SharedPreferences文件在不同应用之间数据共享

    但在某些情况下,我们可能需要在不同的应用程序之间共享数据,这就涉及到跨应用SharedPreferences的共享问题。 在Android中,实现不同应用间的数据共享主要有以下几种方法: 1. **ContentProvider**:Android系统...

    ContentProvider封装SharedPreferences功能,解决跨进程存取值的问题

    ContentProvider封装SharedPreferences功能,解决跨进程存取值的问题, 我之前一直用自己封装的SharePreferences,后来出现跨进程问题;就用这个 ContentProvider,真好用,值得拥有!

    使用SharedPreferences进行数据存储

    `SharedPreferences`是Android提供的一种轻量级的数据存储方式,主要用于保存应用程序的简单配置数据,如布尔值、整型、浮点型、字符串等。这篇博客将深入探讨如何使用`SharedPreferences`进行数据存储,以及其背后...

    android4.0跨应用共享数据通过sharepreference

    在Android系统中,数据共享是应用之间相互交互的重要方式,特别是...对于更复杂的数据共享需求,如大量结构化数据,推荐使用ContentProvider配合SQLite数据库或者使用其他的跨进程通信(IPC)机制,如 Binder 或 AIDL。

    读写SharedPreferences中的数据

    SharedPreferences实际上是通过XML文件存储数据的,位于应用的私有数据目录下,如`/data/data/your.package.name/shared_prefs/MyPreferences.xml`。每次调用`apply()`或`commit()`,系统都会更新这个XML文件。 当...

    Android进程间通讯——多进程共用SharedPreferences

    在使用SharedPreferences进行进程数据共享时,我们发现,有些虽然过时了,但是实际上还是可以用的。 只是Google不建议大家这么干了。所以这篇文章只是一个介绍实现,科普。 ...

    用SharedPreferences方式储存数据

    在没有网络的情况下,通过SharedPreferences来存储之前从网络获取的数据,可以实现离线状态下应用依然能够正常运行和展示信息,从而有效地节省用户的流量。 以下是对SharedPreferences存储数据的详细步骤和知识点:...

    使用SharedPreferences实现简单数据应用程序共享

    SharedPreferences可以让不同程序之间的数据进行共享,当两个应用程序之间数据需要传递或者共享时,可以使用这个方法。本文会使用两个例子SharePreferenceWrite和SharePreferenceRead,前者为一个写...

    SharedPreferences数据存储和读取实例

    在Android应用开发中,SharedPreferences是Android提供的一种轻量级的数据存储方式,主要用于存储一些简单的配置信息,如用户偏好设置、应用程序的状态等。它是一个键值对的存储系统,支持基本数据类型,如布尔型、...

    实验九 使用SharedPreferences存储简单数据

    在Android应用开发中,SharedPreferences是Android提供的一种轻量级的数据存储方式,主要用于存储应用程序中的配置信息或者用户的一些简单设置。这个实验旨在让你了解并掌握如何使用SharedPreferences来存储和读取...

    Android开发之数据存储的四种方式之SharedPreferences

    Android项目开发中使用的数据存储方式有:网络存储、sqlite存储、File存储和SharedPreferences存储,四种存储方式对应的Demo别人是NetworkDemo、SqliteDemo、FileDemo和SharedPreferencesDemo,根据应用的场景选择...

    SharedPreferences存储获取信息例子

    在Android应用开发中,SharedPreferences是Android提供的一种轻量级的数据存储方式,主要用于存储应用程序的配置信息或者用户的一些简单设置。它的优点在于操作简单、效率高,适用于存储非频繁变动且数据量不大的...

    android应用SharedPreferences_Demo

    android应用SharedPreferences_Demoandroid应用SharedPreferences_Demoandroid应用SharedPreferences_Demoandroid应用SharedPreferences_Demoandroid应用SharedPreferences_Demoandroid应用SharedPreferences_Demo...

    Android应用源码之SharedPreferences.zip

    SharedPreferences通常在不同的Activity之间共享数据,只要它们属于同一个应用程序,并且使用相同的名称来获取SharedPreferences实例。 5. **生命周期**: SharedPreferences的数据是持久化的,即使应用程序被...

    ContentProvider封装SharedPreferences功能,解决跨进程存取值的问题-附件资源

    ContentProvider封装SharedPreferences功能,解决跨进程存取值的问题-附件资源

    Android数据共享 sharedPreferences 的使用方法

    SharedPreferences 是 Android 中的一种轻量级的数据存储方式,主要用来存储应用程序中的配置信息、用户偏好设置等。SharedPreferences 使用键值对的方式来存储数据,通过put方法将数据写入到文件中,並使用get方法...

Global site tag (gtag.js) - Google Analytics