news 2026/1/18 6:17:06

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进行投诉反馈,一经查实,立即删除!
网站建设 2025/12/16 15:23:01

OpenAI开源gpt-oss-120b/20b:单卡可跑的MoE推理模型

OpenAI开源gpt-oss-120b/20b&#xff1a;单卡可跑的MoE推理模型 在一张消费级显卡上运行接近GPT-4级别的语言模型&#xff0c;这在过去几乎是天方夜谭。而如今&#xff0c;OpenAI推出的 gpt-oss-20b 让这一设想成为现实——它不仅拥有210亿总参数&#xff0c;还能在仅16GB显存的…

作者头像 李华
网站建设 2026/1/14 23:41:04

Dify v0.6.9 源码部署与核心表结构解析

Dify v0.6.9 源码部署与核心表结构解析 在 AI 应用开发日益普及的今天&#xff0c;如何快速构建一个支持 RAG、Agent 编排和可视化流程的大模型平台&#xff0c;成为许多团队关注的重点。Dify 正是为此而生——它不仅提供直观的前端界面&#xff0c;还以清晰的模块化架构支撑复…

作者头像 李华
网站建设 2025/12/16 15:22:31

修改Dify默认80端口的完整步骤

修改Dify默认80端口的完整步骤 在部署开源 LLM 应用开发平台 Dify 时&#xff0c;很多人会遇到一个看似简单却容易踩坑的问题&#xff1a;端口冲突。 Dify 默认通过 80&#xff08;HTTP&#xff09;和 443&#xff08;HTTPS&#xff09;端口对外提供服务。这在本地测试环境中…

作者头像 李华
网站建设 2025/12/26 7:41:58

YOLO + PyTorch 实时检测黄金组合

YOLO PyTorch 实时检测黄金组合 在智能制造工厂的流水线上&#xff0c;一台嵌入式视觉系统正以每秒50帧的速度扫描经过的PCB板。突然&#xff0c;一个微小的贴片电阻被识别为反向安装——这个肉眼几乎难以察觉的缺陷&#xff0c;在毫秒级内触发了剔除机制。背后驱动这一切的&a…

作者头像 李华
网站建设 2025/12/27 3:13:59

基于 (java) validation-api、hibernate-validator 的数据校验扩展

在Java 开发中&#xff0c;数据校验是保证系统健壮性和数据完整性的重要环节。validation-api和hibernate-validator功能强大&#xff0c;在这个基础上&#xff0c;做了一些检验简单扩展处理&#xff0c;在处理复杂业务场景时提供一些支持。 项目简介 brilliant-validation是…

作者头像 李华
网站建设 2026/1/18 5:45:24

GPT-OSS-20B性能对比:低延迟与高效推理解析

GPT-OSS-20B性能解析&#xff1a;如何在16GB设备上跑出类GPT-4的推理表现&#xff1f; 你有没有遇到过这样的场景&#xff1a;本地部署一个“轻量级”大模型&#xff0c;结果显存爆了、响应慢如蜗牛、生成内容还经常卡壳&#xff1f;这几乎是每个尝试将大模型落地到消费级硬件…

作者头像 李华