news 2026/1/10 15:33:12

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/31 23:29:12

FaceFusion报错:未检测到源人脸

FaceFusion报错&#xff1a;未检测到源人脸 在使用FaceFusion进行换脸处理时&#xff0c;你是否曾遇到这样的情况——明明图像中清清楚楚有一张脸&#xff0c;命令也写得没错&#xff0c;可运行后却只返回一句冰冷的提示&#xff1a; Error: No source face detected.或者类似的…

作者头像 李华
网站建设 2025/12/30 11:05:27

Tigshop 开源商城系统 【商品预售功能】上新!全款+定金双模式深度适配全行业经营需求

还在为商城系统没有预售功能发愁&#xff1f;Tigshop 开源商城系统单商户、多商户、供应商、企业批发的JAVA版本再添新功能-商品预售&#xff0c;精准切入商家经营核心痛点 —— 库存积压、资金周转难、新品试错高、高客单转化低。通过全款预售和定金预售两种核心模式&#xff…

作者头像 李华
网站建设 2025/12/29 2:29:10

YOLOv8官方文档中文解读:新手必读

YOLOv8官方文档中文解读&#xff1a;新手必读 在智能制造、智能安防和自动驾驶等前沿领域&#xff0c;实时目标检测早已不再是实验室里的概念&#xff0c;而是产线上的刚需。面对成千上万帧图像的快速识别需求&#xff0c;工程师们需要一个既能“跑得快”又能“看得准”的解决方…

作者头像 李华
网站建设 2025/12/31 1:02:18

基于深度学习的植物病害检测系统(UI界面+YOLOv8/v7/v6/v5代码+训练数据集)

摘要 植物病害是全球农业生产面临的重要挑战之一,传统的人工检测方法效率低下且容易出错。本文介绍了一套完整的基于深度学习的植物病害检测系统,该系统整合了YOLOv5、YOLOv8和YOLOv10等多种先进的目标检测算法,并配备了直观的用户界面。我们将详细探讨系统架构设计、数据集…

作者头像 李华
网站建设 2025/12/30 9:24:34

Stable Diffusion 3.5本地部署指南与一键整合包

Stable Diffusion 3.5 FP8本地部署实战&#xff1a;如何用12GB显存跑出高质量AI图像&#xff1f; 在AI绘画领域&#xff0c;每次新模型的发布都像一场技术地震。2024年11月&#xff0c;Stability AI推出的 Stable-Diffusion-3.5-FP8 模型&#xff0c;就让不少原本以为自己硬件…

作者头像 李华
网站建设 2025/12/31 20:30:31

Wan2.2-T2V-A14B本地部署与多GPU推理指南

Wan2.2-T2V-A14B本地部署与多GPU推理实战&#xff1a;从零构建高性能视频生成系统 你有没有遇到过这样的场景&#xff1f;团队正在为一个广告项目反复修改分镜脚本&#xff0c;导演希望看到“赛博猫在霓虹雨夜屋顶追逐”的动态预览&#xff0c;但传统3D动画流程耗时动辄数天。…

作者头像 李华