在owner切换成guest用户时,发现无法获取到OP_RECORD_AUDIO = 27权限


在创建audiosource时,传入的包名

 new AudioSource(...

            String16("media")/* mOpPackageName */,

media UID 1013 属于系统进程,得到userhandle 0

而在owner 切换到 guest 用户时,audioservice 会将userhandle 0 disallow record audio 

 UserManagerService.getInstance().setSystemControlledUserRestriction(

                        UserManager.DISALLOW_RECORD_AUDIO, true, userId);//(userId = 0)


导致guest用户无法获取到record audio 权限


根据uid获取userhandle 逻辑

core/java/android/os/UserHandle.java

public static @UserIdInt int getUserId(int uid) {

        if (MU_ENABLED) {

            return uid / PER_USER_RANGE;

        } else {

            return UserHandle.USER_SYSTEM;

        }

    }

M 上没有切换问题,是因为
miracast 与 audio 运行在同一个进程中,在serviceutility.cpp中

if (getpid_cached == IPCThreadState::self()->getCallingPid()) return true;
会直接返回

而N 上面因为media harden原因,miracast与audio运行在不同进程中,该处无法直接返回,继续进行ops权限检查

ServiceUtility中放开对aid_media限制,无法通过CTS验证



附录 android 多用户
http://blog.csdn.net/zhanglianyu00/article/details/50253187

3.Android多用户 
Android4.2开始支持多用户。Linux的uid/gid多用户体系已经被用在App管理上了,所以android重新开发了一套多用户体系,在UserManagerService中管理,PackageManagerService和ActivityManagerService中也有相关逻辑。Android的多用户可以做到不同用户的应用的物理文件级(数据)的区分,以实现不同用户有不同的壁纸、密码,以及不同的应用等。本文不展开多用户的机制,只集中于uid。 
先看一下在多用户下,应用的uid怎么变化。 
在一个有两个用户(用户id分别为0和10)的安卓设备上,在用户10下安装一个应用,此时,在0下是看不到这个应用的。 

更多相关文章

  1. Android(安卓)Studio使用来自控制台的模拟器,/dev/kvm device:
  2. Android(安卓)Q适配(4)-------针对后台 Activity 启动的限制
  3. Retrofit2+Restful api的入门使用
  4. 关于Android系统 和 Android应用程序
  5. Android(安卓)系统启动流程
  6. Android(安卓)创世纪 第二天
  7. Android之Service 的生命周期
  8. 使用ContentProvider
  9. android studio 官方用户指南翻译学习(四)创建 Android(安卓)libra

随机推荐

  1. Android(安卓)5.0最应该实现的8个期望
  2. 我的Android音乐播放器
  3. android手机QQ界面设计
  4. android的消息处理机制(图+源码分析)——Lo
  5. Google Android操作系统内核编译图文教程
  6. Android(安卓)App开发基础篇—四大组件之
  7. Android网络收音机项目
  8. android:绘图
  9. Android快速入门(一):Android介绍
  10. Android(安卓)3.0发布了