在owner切换成guest用户时,发现无法获取到OP_RECORD_AUDIO = 27权限
成都创新互联公司是专业的汝南网站建设公司,汝南接单;提供成都网站设计、成都网站制作,网页设计,网站设计,建网站,PHP网站建设等专业做网站服务;采用PHP框架,可快速的进行汝南网站开发网页制作和功能扩展;专业做搜索引擎喜爱的网站,专业的做网站团队,希望更多企业前来合作!
在创建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下是看不到这个应用的。
当前名称:guestmode无法recordaudio
本文来源:http://lswzjz.com/article/ipgcsd.html