安卓隐私指示器学习笔记

最近了解到Google 在Android12上新增了权限指示器,可以在信号栏的右侧显示当前访问录音机和Camera的应用,点击后可以跳转到相应应用的权限界面,消费者可以控制权限的开启和关闭。国内手机厂商最近几年都在增加隐私看板供能,消费者可以看到相机、录音机被其他应用访问的记录,包含次数、时长等信息。

尤其Android 14,强制要求在信号区增加隐私指示器,可见安卓在隐私保护上的决心。

我估计手动控制权限的开启和关闭,并不是这个特性和核心。关键是Google或者说安卓系统愿意把权限的调用暴露给普通的消费者,本身这个态度带来的社会效应,至少让消费者最担心的声音和图像的泄露问题,得到了缓解。

本文主要是探讨起技术实现原理:

google官方文档链接如下,中英文还是略微有些区别,注意甄别https://source.android.com/docs/core/permissions/privacy-indicators

里面关键的图:

上图可见,核心的交互模块是AppOps,AppOps并不是Android12的新事物,早在Android 4.0就有了,其内部核心的几个类,

AppOpsManager

IAppOpsService.aidl  

AppOpsService

AppOpsCheckingServiceImpl
 

普通的安卓应用可以调用下述接口,监听Ops的访问记录

appOpsManager.startWatchingMode(AppOpsManager.OPSTR_READ_MEDIA_AUDIO,  null /* all packages */, mModeListener);

其中,第二个参数,传null代表,监听所有应用,也可以传具体的包名

当关心的包名,访问了具体的Ops,监听者就会收到回调。

调试手段:

adb shell dumpsys appops可以把ops服务的内部状态dump出来

具体解释如下:

Op mode watchers:
    Op COARSE_LOCATION:
      #0: ModeCallback{7f9fe97 watchinguid=-1 flags=0x0 op=FINE_LOCATION from uid=u0a144 pid=4204}
      #1: ModeCallback{82529b5 watchinguid=-1 flags=0x1 op=COARSE_LOCATION from uid=1000 pid=2265}
      #2: ModeCallback{926d7c2 watchinguid=-1 flags=0x0 op=READ_WRITE_HEALTH_DATA from uid=1000 pid=2265}
      #3: ModeCallback{da82a52 watchinguid=-1 flags=0x1 op=MONITOR_LOCATION from uid=u0a21 pid=4702}
      #4: ModeCallback{efa62b9 watchinguid=-1 flags=0x1 op=FINE_LOCATION from uid=u0a21 pid=4702}
    Op FINE_LOCATION:
      #0: ModeCallback{59f601b watchinguid=-1 flags=0x1 op=FINE_LOCATION from uid=1000 pid=2265}
      #1: ModeCallback{7f9fe97 watchinguid=-1 flags=0x0 op=FINE_LOCATION from uid=u0a144 pid=4204}
      #2: ModeCallback{926d7c2 watchinguid=-1 flags=0x0 op=READ_WRITE_HEALTH_DATA from uid=1000 pid=2265}

这是按具体的ops排列,打印出所有的监听者,可以配合ps -A命令查看具体的pid是哪个进程

 Package mode watchers:
    Pkg com.microsoft.appmanager:
      #0: ModeCallback{5f879b8 watchinguid=-1 flags=0x0 op=SYSTEM_ALERT_WINDOW from uid=1000 pid=5190}
    Pkg com.youku.phone:
      #0: ModeCallback{4e42e95 watchinguid=-1 flags=0x0 op=SYSTEM_ALERT_WINDOW from uid=1000 pid=5190}
      #1: ModeCallback{cd0ffac watchinguid=-1 flags=0x0 op=REQUEST_INSTALL_PACKAGES from uid=1000 pid=5190}

这是按具体的包名排列,打印出所有的监听者,可以配合ps -A命令查看具体的pid是哪个进程

Uid u0a237:
    state=cch
    capability=------
    appWidgetVisible=false
      POST_NOTIFICATION: mode=ignore
      LEGACY_STORAGE: mode=allow
    Package com.alphainventor.filemanager:
      WAKE_LOCK (allow): 
        null=[
          Access: [top-s] 2023-11-14 11:33:19.924 (-7d1h1m54s148ms) duration=+42ms
        ]
      READ_EXTERNAL_STORAGE (allow): 
        null=[
          Access: [top-s] 2023-11-14 11:33:16.111 (-7d1h1m57s961ms)
        ]

这是按具体的Uid(包名),打印出最近的访问记录

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/179286.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【css】Google第三方登录按钮样式修改

文章目录 场景前置准备修改样式官方属性修改样式CSS修改样式按钮的高度height和border-radiusLogo和文字布局 场景 需要用到谷歌的第三方登录,登录按钮有自己的样式。根据官方文档:概览 | Authentication | Google for Developers,提供两种第…

Spark的通用运行流程与Spark YARN Cluster 模式的运行流程

Spark的通用运行流程 集群启动后Worker节点会向Master节点心跳汇报资源Client向Driver提交APP,根据不同的运行模式在不同的地方创建Driver。Driver以粗粒度的方式向Master注册应用并申请资源(在Application执行之前,将所有的资源申请完毕&…

创作4周年

🙌秋名山码民的主页 😂oi退役选手,Java、大数据、单片机、IoT均有所涉猎,热爱技术,技术无罪 🎉欢迎关注🔎点赞👍收藏⭐️留言📝 获取源码,添加WX 目录 前言机…

C语言指针相关练习题

​ C语言指针相关练习题 文章目录 C语言指针相关练习题题目一题目二题目三题目四题目五题目六题目七 题目一 #include <stdio.h> int main() {int a[5] { 1, 2, 3, 4, 5 };int *ptr (int *)(&a 1);printf( "%d,%d", *(a 1), *(ptr - 1));return 0; }…

使用Python画一棵树

&#x1f38a;专栏【不单调的代码】 &#x1f354;喜欢的诗句&#xff1a;更喜岷山千里雪 三军过后尽开颜。 &#x1f386;音乐分享【如愿】 &#x1f970;欢迎并且感谢大家指出我的问题 文章目录 &#x1f339;Turtle模块&#x1f384;效果&#x1f33a;代码&#x1f6f8;代码…

城市生命线丨桥梁健康结构监测系统作用如何

截至2022年底&#xff0c;我国拥有公路桥梁103.3万座&#xff0c;总长约8576万延米&#xff0c;其中特大桥8816座&#xff0c;总长约1621万延米。 为了确保这些桥梁的安全&#xff0c;需要进行定期的检测和维护&#xff0c;及时发现和解决桥梁存在的问题。 同时&#xff0c;政…

杭电oj 2064 汉诺塔III

#include <stdio.h>void main() {int n, i;long long sum[35] { 2,8,26 };for (i 3; i < 35; i)sum[i] 3 * sum[i - 1] 2;while (~scanf_s("%d", &n))printf("%lld\n", sum[n - 1]); }

9.4 Windows驱动开发:内核PE结构VA与FOA转换

本章将继续探索内核中解析PE文件的相关内容&#xff0c;PE文件中FOA与VA,RVA之间的转换也是很重要的&#xff0c;所谓的FOA是文件中的地址&#xff0c;VA则是内存装入后的虚拟地址&#xff0c;RVA是内存基址与当前地址的相对偏移&#xff0c;本章还是需要用到《内核解析PE结构导…

带记忆的超级GPT智能体,能做饭、煮咖啡、整理家务!

随着AI技术的快速迭代&#xff0c;Alexa、Siri、小度、天猫精灵等语音助手得到了广泛应用。但在自然语言理解和完成复杂任务方面仍然有限。 相比文本的标准格式&#xff0c;语音充满复杂性和多样性&#xff08;例如&#xff0c;地方话&#xff09;,传统方法很难适应不同用户的…

NX二次开发UF_CAM_PREPRO_mark_model_as_cam 函数介绍

文章作者&#xff1a;里海 来源网站&#xff1a;https://blog.csdn.net/WangPaiFeiXingYuan UF_CAM_PREPRO_mark_model_as_cam Defined in: uf_cam_prepro.h int UF_CAM_PREPRO_mark_model_as_cam(tag_t model ) overview 概述 This function will mark the facet model as…

c++学习之哈希

目录 1.关于unordered系列关联式容器 2.关于unordered_map 3.哈希&#xff08;散列&#xff09;表的实现 一&#xff0c;直接定址法 二&#xff0c;除留余数法 方法一&#xff1a;闭散列&#xff1a;开放定址法 方法二&#xff1a;闭散列&#xff1a;哈希桶/拉链法 4.哈希…

设计模式——RBAC 模型详解

1.什么是 RBAC 呢&#xff1f; RBAC 即基于角色的权限访问控制&#xff08;Role-Based Access Control&#xff09;。这是一种通过角色关联权限&#xff0c;角色同时又关联用户的授权方式。 简单地说&#xff1a;一个用户可以拥有若干角色&#xff0c;每一个角色又可以被分配…

maven打包可执行jar含依赖lib

修改pom.xml <build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><!-- jdk8可用&#xff0c;其他jdk版本可能需改插件版本 --><version>2.3.7.RE…

内存可见性与指令重排序

文章目录 内存可见性内存可见性问题代码演示JMM&#xff08;Java Memory Model&#xff09; 指令重排序指令重排序问题代码演示指令重排序分析 volatile关键字volatile 保证内存可见性 & 禁止指令重排序volatile 不保证原子性 在上一节介绍线程安全问题的过程中&#xff0c…

【计算思维】蓝桥杯STEMA 科技素养考试真题及解析 2

1、兰兰有一些数字卡片&#xff0c;从 1 到 100 的数字都有&#xff0c;她拿出几张数字卡片按照一定顺序摆放。想一想&#xff0c;第 5 张卡片应该是 A、11 B、12 C、13 D、14 答案&#xff1a;C 2、按照下图的规律&#xff0c;阴影部分应该填 A、 B、 C、 D、 答案&am…

汇编-PROC定义子过程(函数)

过程定义 过程用PROC和ENDP伪指令来声明&#xff0c; 并且必须为其分配一个名字(有效的标识符) 。目前为止&#xff0c; 我们所有编写的程序都包含了一个main过程&#xff0c; 例如&#xff1a; 当要创建的过程不是程序的启动过程时&#xff0c; 就用RET指令来结束它。RET强制…

Arthas 监听 Docker 部署的java项目CPU占比高的信息

1、Linux上安装Arthas wget https://alibaba.github.io/arthas/arthas-boot.jar2、docker ps 查看目标项目的容器ID 3、copy Arthas 到目标容器中 (注意有 &#x1f615; ) docker cp arthas-boot.jar d97e8666666:/4、进入到目标容器目录中 docker exec -it d97e8666666 /b…

FFmpeg 6.1 开放源码多媒体框架近日发布了重大更新

导读FFmpeg 6.1 开放源码多媒体框架近日发布了重大更新&#xff0c;带来了新功能、新解码器、新过滤器和许多其他变化。 在 FFmpeg 6.0 “Von Neumann “版本发布八个多月后&#xff0c;FFmpeg 6.1 被命名为 “Heaviside”&#xff0c;引入了多线程 Vulkan 硬件加速解码&#x…

【React-Router】路由快速上手

1. 创建路由开发环境 # 使用CRA创建项目 npm create-react-app react-router-pro# 安装最新的ReactRouter包 npm i react-router-dom2. 快速开始 // index.jsimport React from react; import ReactDOM from react-dom/client; import ./index.css; import App from ./App; i…

在终端输入任意的英文字符串,求最后一个单词的长度

实例要求&#xff1a;1、在终端输入任意的英文字符串 s&#xff0c;由若干单词组成&#xff0c;单词前后用一些空格字符隔开&#xff1b;2、返回字符串中 最后一个 单词的长度&#xff1b;3、单词 是指仅由字母组成、不包含任何空格字符的最大子字符串&#xff1b;示例代码&…
最新文章