Android APP之间共享数据

背景:

Binder AIDL,Socket可以解决APP之间的通信。

APP之间的数据安全共享该如何实现呢?

方案:

利用ContentProvider和contentResolver可实现在不同应用程序之间的数据共享,并保证被访问数据的安全性。ContentProvider用于暴露数据,contentResolver用于操作数据。

案例:

Google 地图-车辆界面

使用地图-车辆接口 (MVI)协议缓冲区API 实现 Google 地图与车辆制造商的车辆系统之间的双向通信。通常,该接口由 OEM 厂商通过运行在 Android Automotive 平台上的应用程序来实现。

Google sample介绍原文:

Maps-Vehicle Interface Architecture

The Maps-Vehicle Interface (MVI) uses the Android:
The MVI exchanges data in three steps:
  1. The vehicle notifies Google Maps, through Android ContentResolver, that either new content is available or existing content has changed.

  2. Google Maps queries the vehicle's ContentProvider, through Android ContentResolver, with a specific content Uri.

  3. Once a data pipe has been established, wire-encoded protocol buffers can be exchanged by Google Maps either by reading or writing to the OEM app ContentProvider.

实现细节:

创建内容提供程序

Google Maps 订阅了一个 Android ContentProvider类,OEM 应用必须实现该类才能与 Google Maps 交换数据。OEM 应用只需实现其ContentProvider类的ContentProvider.openFile方法,该方法返回一个ParcelFileDescriptor ,用于建立一个读/写数据管道,以便交换通过ParcelFileDescriptor.createPipe获取的线编码协议缓冲区。对于任何特定的内容URIContentProvider实现必须严格支持两种访问模式:一种是只读访问模式("r"),用于从车辆读取数据到地图;另一种是只写访问模式("w"),用于从地图向车辆写入数据。

注意: OEM 应用可以将线路编码的协议缓冲区存储在SharedPreferences中,该缓冲区在应用重启后仍然保留。您可以在oem/VehicleContentProvider.java中查看ContentProvider示例实现(以及将序列化的协议缓冲区存储在SharedPreferences中)。

允许 Google Maps 访问 ContentProvider 类

要使 Google Maps 能够访问ContentProvider类,必须在 Android Manifest 文件中通过<provider>标签将其公开。最重要的是,必须将exported属性设置为true ,以允许外部应用查询ContentProvider类,并且权限必须为google_maps_energy (用于电动汽车能源模型功能)或google_maps_settings (用于 Google Maps 自定义功能)。例如:

复制代码
<provider
    android:name=".VehicleContentProvider"
    android:authorities="google_maps_settings"
    android:exported="true"/>

处理多个内容授权,授权实体之间用分号(;)隔开;在单个ContentProvider实现中处理多个内容授权机构是可行的,但并非必须。为此, ContentProvider必须在AndroidManifest.xml<provider>标签中列出所有要处理的授权机构(用分号分隔)。以下示例允许VehicleContentProvider类同时处理google_maps_settingsgoogle_maps_energy内容授权

复制代码
<provider
    android:name=".VehicleContentProvider"
    android:authorities="google_maps_settings;google_maps_energy"
    android:exported="true"/>
相关推荐
baidu_2474386117 小时前
Android ViewModel定时任务
android·开发语言·javascript
有位神秘人17 小时前
Android中Notification的使用详解
android·java·javascript
·云扬·17 小时前
MySQL Binlog落盘机制深度解析:性能与安全性的平衡艺术
android·mysql·adb
独自破碎E18 小时前
【BISHI9】田忌赛马
android·java·开发语言
代码s贝多芬的音符20 小时前
android 两个人脸对比 mlkit
android
darkb1rd1 天前
五、PHP类型转换与类型安全
android·安全·php
gjxDaniel1 天前
Kotlin编程语言入门与常见问题
android·开发语言·kotlin
csj501 天前
安卓基础之《(22)—高级控件(4)碎片Fragment》
android
峥嵘life1 天前
Android16 【CTS】CtsMediaCodecTestCases等一些列Media测试存在Failed项
android·linux·学习
stevenzqzq1 天前
Compose 中的状态可变性体系
android·compose