面试之路(13)-android apk之间共享数据的方式以及shareUserId详解
1.通过content Provider/sharedPreferrence
2.通过shareUserId
我们详细介绍一下shareUserId:
Android App Sandbox(android沙箱机制)
我们知道 Linux 中的 Sandbox 主要做隔离工作,将不同任务或用户间的耦合降到最低。Android 应用也借用了 Linux Sandbox技术,将不同 APP 之间做了隔离;APP 之间的隔离主要是资源隔离和权限访问隔离。
每个 Android APP 都运行在他们自己的 Linux 线程中(UID不同),每个应用程序彼此独立,默认情况下无法访问其他应用程序资源。 APP 权限机制为应用程序之间的资源互访提供了可行性,APP必须申请到权限并经过用户授权后才能访问 Android 系统 API 或 其他阴功程序的服务。
如果两个 Android App 运行在同一个进程里(此时的 UID 是相同的),可以共享数据和代码。
如何让两个 APP 运行在同一个进程里?
- 首先,两个 APP 要用相同的 private key 来签名
- 然后,添加两个APP manifest.xml 文件中属性 android:sharedUserId,均设置为相同的值或名字(其实是设置成相同的UID)。
利用ShareUserID共享数据
try {Context ct=this.createPackageContext ("com.mythou.serviceID", Context.CONTEXT_IGNORE_SECURITY);SharedPreferences sp = ct.getSharedPreferences("appInfo", MODE_PRIVATE);String str2 = sp.getString("appname", "service");Log.d("mythou", "share preference-->" + str2);} catch (NameNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();}
关键代码:
Context ct=this.createPackageContext("com.mythou.serviceID", Context.CONTEXT_IGNORE_SECURITY);
Android Permission 机制
Permissions 机制限制应用访问特定的资源,如照相机、网络、外部存储、查看通话记录以及某些API。
APP 可以自己定义 Permission 来限制别的APP访问自己的资源。别的应用想访问此 APP 的资源,必须在自己的 AndroidManifest.xml 中添加此 Permission。自定义权限也是在 AndroidManifest.xml 通过 标签定义。
自定义一个 Permission,至少需要的元素是 name, description, label 和 protectionLevel。
我们最关心的选项是 protectionLevel
normal,默认值。系统自动授予此 Permission,在 APP 安装的时候能看到申请此 Permission。
signature,具有相同的 Signature的 APP,才能申请此 Permission,否则,系统拒绝。
dangerous,一般来说系统不会自动授予此 Permission,因为此 Permission 会有潜在的威胁;一般来说在使用 APP 的过程中,需要用到此权限,会弹出窗口,让用户来授权。
<script type="text/javascript"> $(function () { $('pre.prettyprint code').each(function () { var lines = $(this).text().split('\n').length; var $numbering = $('<ul/>').addClass('pre-numbering').hide(); $(this).addClass('has-numbering').parent().append($numbering); for (i = 1; i <= lines; i++) { $numbering.append($('<li/>').text(i)); }; $numbering.fadeIn(1700); }); }); </script>
面试之路(13)-android apk之间共享数据的方式以及shareUserId详解相关推荐
- android fragment加载布局的方式,Android中Fragment的加载方式与数据通信详解
Android中Fragment的加载方式与数据通信详解 发布时间:2020-08-22 18:55:57 来源:脚本之家 阅读:155 作者:Joah 一.加载方式 1. 静态加载 1.1 加载步骤 ...
- Java高并发编程:多个线程之间共享数据的方式探讨
内容摘要 多个线程之间共享数据,按照每个线程执行代码是否相同,我们可以采取不同的处理方式,这里通过简单的卖票示例说明了当每个线程执行相同代码的情况,对于多个线程执行不同代码的情况,处理方式比较灵活,这 ...
- android fragment面试,Android fragment之间传递数据的方式?
方法一: 1.在MainFragment中设置一个setData()方法,在方法中设置更改按钮名称; //MainFragment.java文件中public void setData(String ...
- java 多线程 共享数据_JAVA多线程提高四:多个线程之间共享数据的方式
多个线程访问共享对象和数据的方式 如果每个线程执行的代码相同,可以使用同一个Runnable对象,这个Runnable对象中有那个共享数据,例如,买票系统就可以这么做. 如果每个线程执行的代码不同,这 ...
- 对Android手机系统日历数据增删改查操作详解
Android手机系统日历数据增删改查详解 前段时间需要开发提取手机系统的日历数据的功能,自己开始研究了一下,刚开始还是比较懵逼的,经过仔细研究还是能够完全贯通了. 如果不想细细研究,可以直接下载我的 ...
- 移动应用开发之路 04 Android Studio 5种控件介绍、实战详解
学校开了一门移动应用开发课程,我一开始兴趣盎然,但是看到使用的环境是 Java 8 的时候心就凉了一半,在询问老师的意见之后决定使用现在比较常用的Android Studio完成学习,特此记录自学之路 ...
- 如何在两个线程之间共享数据
两个线程之间共享数据的方式 Java 里面进行多线程通信的主要方式就是共享内存的方式,共享内存主要的关注点有两个:可见 性和有序性原子性.Java 内存模型(JMM)解决了可见性和有序性的问题,而锁解 ...
- Android APP之间共享SharedPreference
条件 sharedUserId相同 我们知道,Android上的各个APP是用户分离的,每个APP都有不同的UserId,这种共享数据的方式要求这两个APP必须是相同的UserId. 在Android ...
- [转载] 如何在Android设备之间共享Google Play应用,音乐等
参考链接: 使用super访问Java祖父母的成员 We recently showed you how to configure your iOS devices for app and media ...
最新文章
- Linux命令cat
- 在不丢失堆栈跟踪的情况下重新抛出Java中的异常
- Effective C# 原则16:垃圾最小化(译)
- 组合数据类型{集合,序列【字符串,元组,列表】,字典}
- 工具资源系列之给mac装个虚拟机
- collector list 多个分组_【S01E07】groupby方法、GroupBy对象、groupby方法的分组键
- IEEP-网络实施-项目交付流程
- Win10+Pytorch0.4.1版本+cuda一键安装
- Qt|表格代理的实现及使用代码qtableview和qtablewidget均适用
- 【大气红歌】著名民通歌唱家拉齐的音乐之路
- Unity的UI界面管理器
- JQuery选择器超级详细
- win10计算机管理中没有本地用户和组怎么办
- 【电子电路计算公式】 导线流过电流计算工具,我已经做成一个小工具了(源代码)
- mysql中辅导方式选择_MYSQL中如何选择合适的数据类型
- response.setHeader()方法设置http文件头的值
- 课时8-2:adams建约束副----凸轮约束(平面推杆、尖底推杆)高副(点面、面面接触)
- mysql中BY是什么意思,order是什么意思-sql中的orderby是什么意思它是在什 – 手机爱问...
- LINUX解压缩TAR.GZ文件命令
- Linux中常用命令汇总