Repository navigation
基于ContentProvider的Android进程间键值传递工具
Android Inter-process Key-value Transmission Tool Based on ContentProvider
特性
- 使用LiveData跨进程对键值对进行修改或监听
- 使用ContentProvider作为跨进程方式
- 使用Room存储数据
使用方法
数据提供方
和常规的LiveData与ContentProvider使用一致, 在数据提供方的应用中继承ProcessProvider和ProcessLiveData, 需要先在AndroidManifest.xml文件中声明Provider, 目前Provider的uri是固定的, 如下设置即可
<application>
<provider
android:name="com.popkter.processlivedata.ProcessProvider"
android:authorities="com.popkter.proceelivedata"
android:exported="true"/>
</application>ProcessProvider支持重写, 可以继承此类重写URI.(NOT YET)
数据提供方可通过ProcessProviderExtension中对于ContentResolver的拓展方法操作数据. 需要注意, String 键值对的key需要告知调用方才能使其获取到对应的value, 如下:
contentResolver.putConfig("test_key",10086.toString())
contentResolver.getConfig("test_key",10086.toString())
val observer = contentResolver.observerConfig("test_key"){str->
// TODO:
}
当然, 也可以使用ProcessLiveData, 不过不如使用上面的方式来的痛快. 详见下文.
数据使用方
使用方需要在AndroidManifest.xml中声明数据提供方的包名(Android11后的安全规则),如下:
<queries>
<!-- 请替换成自己的包名 -->
<package android:name="com.popkter.processlivedata_app"/>
</queries>而后可在代码中进行数据的观察和设置. 需要注意的是,因为基于ContentProvider, 所以需要传入ContentResolver, 以及目前仅支持String 键值对的操作, 因此在观察的时候需要传入一个key, 才能够观察到对应的value, 如下:
val liveData = ProcessLiveData(contentResolver,"test_key")
liveData.observe(this){ str->
//TODO
}
liveData.postValue("10086")
以上. 需要定制传输数据, fork本项目到本地后定制即可.
引用
作为依赖引入现有项目
Step 1. Add it in your root build.gradle at the end of repositories:
dependencyResolutionManagement {
//...
repositories {
mavenCentral()
maven { url 'https://jitpack.io' }
}
}Step 2. Add the dependency
dependencies {
implementation 'com.github.popkter:ProcessLiveData:1.1'
}(可选) 作为单独的数据中介应用
直接clone项目到本地后运行.