news 2026/4/16 17:47:51

Android APP之间共享数据

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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:
  • content provider to share data between processes
  • ContentProvider on the vehicle side
  • ContentObserver on the Google Maps side
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获取的线编码协议缓冲区。对于任何特定的内容URI ,ContentProvider实现必须严格支持两种访问模式:一种是只读访问模式(“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"/>
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/16 10:58:03

Langchain-Chatchat本地知识库部署与优化

Langchain-Chatchat 本地知识库部署与优化 在企业知识管理日益智能化的今天&#xff0c;如何让员工快速从海量文档中获取准确信息&#xff0c;成为提升效率的关键。传统的关键词搜索往往只能匹配字面内容&#xff0c;而无法理解语义关联&#xff1b;相比之下&#xff0c;基于大…

作者头像 李华
网站建设 2026/4/16 10:53:19

在MySQL中创建数据库和表

1. 登录MySQL数据库mysql -u root -p然后输入你的密码&#xff1a;********如果出现 mysql: command not found 错误&#xff0c;说明MySQL命令行工具没有在PATH中&#xff0c;需要&#xff1a;使用绝对路径&#xff1a;/usr/local/mysql/bin/mysql -u root -p或者将MySQL添加到…

作者头像 李华
网站建设 2026/4/16 10:54:12

YOLO-V5快速入门:从下载到检测实战

YOLO-V5实战入门&#xff1a;从零开始构建你的第一个目标检测系统 在工业质检线上&#xff0c;摄像头扫过流水线&#xff0c;瞬间识别出缺失零件的电路板&#xff1b;在楼宇大堂&#xff0c;门禁系统自动判断行人是否佩戴口罩&#xff1b;在农田上空&#xff0c;无人机飞过便能…

作者头像 李华
网站建设 2026/4/16 10:56:23

施乐5571打印机故障代码093-971解决方案

嘿&#xff0c;朋友们&#xff01;如果你使用施乐5571打印机&#xff0c;那么可能会遇到093-971这个错误代码。相信我&#xff0c;我见过太多这样的情况&#xff0c;这往往让人不知所措。但别担心&#xff0c;这里有一些简单的解决技巧可以帮到你。染料盒安装不当引发的错误 &a…

作者头像 李华
网站建设 2026/4/16 10:56:04

FLUX.1-ControlNet-Union配置指南:30分钟上手AI绘图

FLUX.1-ControlNet-Union配置指南&#xff1a;30分钟上手AI绘图 在AI绘画领域&#xff0c;模型能力越强&#xff0c;部署门槛往往也越高。面对复杂的依赖关系、显存限制和加载报错&#xff0c;许多用户还没开始创作就已放弃。但如果你正寻找一个既能释放顶级生成质量&#xff0…

作者头像 李华
网站建设 2026/4/16 10:55:48

如何将通义千问/Qwen接入LobeChat?完整配置流程

如何将通义千问/Qwen接入LobeChat&#xff1f;完整配置流程 在构建AI助手的浪潮中&#xff0c;越来越多开发者不再满足于“能用”&#xff0c;而是追求“好用”——既要强大的语言能力&#xff0c;也要流畅自然的交互体验。如果你正在寻找一个既能发挥国产大模型中文优势&#…

作者头像 李华