前言
不同应用之间的传值可以使用以下几种方式:
Intent传值
:使用隐式Intent,但需要确保接收方应用可以响应该Intent。Content Provider
通过Content Provider可以在不同的应用之间共享数据。一个应用可以将数据暴露给其他应用,并提供读写权限,其他应用可以通过ContentResolver访问这些数据。
文件共享:两个应用之间可以通过文件共享的方式传递数据。
一个应用可以将数据写入文件,另一个应用可以读取该文件来获取数据。
怎样选择:
假如A是数据的提供方,B是数据的接收方,
如果B一定是A唤起的并且传值的可以使用
Intent传值
方式如果B也能自己打开,还要获取A的值,就使用
Content Provider
方式。最后再考虑文件共享的方式。
Intent传值
使用Intent在不同的应用之间传递数据,可以通过Intent的putExtra()方法添加数据,并通过startActivity()或startActivityForResult()方法启动另一个应用。对于跨应用传值,可以使用隐式Intent,但需要确保接收方应用可以响应该Intent。
示例代码:
发送方应用:
1 | Intent intent = new Intent(); |
接收方应用(在AndroidManifest.xml中声明接收Intent的过滤器):
1 | <receiver android:name=".MyBroadcastReceiver"> |
在接收方应用中的BroadcastReceiver中处理传递过来的数据:
1 | public class MyBroadcastReceiver extends BroadcastReceiver { |
Content Provider
Content Provider:通过Content Provider可以在不同的应用之间共享数据。
一个应用可以将数据暴露给其他应用,并提供读写权限,其他应用可以通过ContentResolver访问这些数据。
这里使用ContentProvider来作为数据的存储地方。
注意:
Content Provider 提供数据的时候,如果提供方APP没有启动,获取方也是获取不到数据的。
提供方配置
在数据提供方应用中,定义一个Content Provider并在AndroidManifest.xml中注册:
1 | import android.content.ContentProvider; |
在AndroidMenifest.xml中使用<provider>
标签来设置ContentProvider
1 | <provider |
注:
android:exported="true"
后才能在其他应用中访问。
AUTHORITY
配置要和android:authorities
保持一致即可,不一定要和项目包名一致。
提供方保存数据
1 | ZSpProvider.save(this, "myblog", "www.psvmc.cn"); |
获取方配置
获取方同样添加上面的类,不用添加到AndroidMenifest.xml
但是要在AndroidMenifest.xml
中application
同级添加提供方的包名
1 | <queries> |
其中com.xhkjedu.manageapp
是提供方的包名,一定要添加该配置否则获取不到数据。
获取数据
1 | val vaue = ZSpProvider.getString(this, "myblog") |
文件共享
文件共享:两个应用之间可以通过文件共享的方式传递数据。一个应用可以将数据写入文件,另一个应用可以读取该文件来获取数据。
示例代码:
发送方应用:
1 | String data = "Hello, this is data to be shared"; |
接收方应用:
1 | File file = new File(getExternalFilesDir(null), "shared_data.txt"); |