权限拒绝:startActivity要求以用户-2身份运行,但是从用户0调用;这需要android.permission.INTERACT_ACROSS_USERS_FULL

时间:2013-08-12 03:28:00

标签: android

当我尝试使用android'am'命令启动一个活动时,在4.2平台下它是错误的(我试过,在2.3版本下它没问题)。代码是这样的

out = process.getOutputStream();
out.write(("am start -a android.intent.action.VIEW -n com.android.browser/com.android.browser.BrowserActivity\n").getBytes());
out.flush();

InputStream in = process.getInputStream();
BufferedReader re = new BufferedReader(new InputStreamReader(in));
String line = null;
while((line = re.readLine()) != null) {
    Log.d("conio","[result]"+line);
}

,错误是这样的:

java.lang.SecurityException: Permission Denial: startActivity asks to run as user -2 but is calling from user 0; this requires android.permission.INTERACT_ACROSS_USERS_FULL 
at android.os.Parcel.readException(Parcel.java:1425)                                                                                                                        
at android.os.Parcel.readException(Parcel.java:1379)                                                                                                                        
at android.app.ActivityManagerProxy.startActivityAsUser(ActivityManagerNative.java:1921)                                                                                    
at com.android.commands.am.Am.runStart(Am.java:494)                                                                                                                         
at com.android.commands.am.Am.run(Am.java:109)                                                                                                                              
at com.android.commands.am.Am.main(Am.java:82)                                                                                                                              
at com.android.internal.os.RuntimeInit.nativeFinishInit(Native Method)                                                                                                      
at com.android.internal.os.RuntimeInit.main(RuntimeInit.java:235)                                                                                                           
at dalvik.system.NativeStart.main(Native Method)                                                                                                                            

我想知道

1.用户-2和0是什么意思?

2.我可以找到有关这些ID的详细信息吗?

3.我该怎么办,只需添加权限?我不想添加我对他们一无所知的权限。任何人都可以帮助我,非常感谢!

5 个答案:

答案 0 :(得分:13)

您看到的用户0和用户-2是 framework userIds,而不是Linux uids。从android.os.UserHandle开始,您可以看到userId 0是设备所有者USER_OWNER(这与Linux uid 0完全不同,后者是root用户。 userId -1代表所有用户(USER_ALL),userId -2代表当前用户(USER_CURRENT),userId -3代表当前用户或自我(CURRENT_OR_SELF),userId -10000表示空用户(USER_NULL)。

就权限INTERACT_ACROSS_USERS_FULL而言,您可以在清单文件中声明它,但只有当您的应用位于Android系统映像中或使用与其他应用程序相同的证书进行签名时才会授予它。声明权限的系统映像。换句话说,它是signaturesignatureOrSystem权限。

答案 1 :(得分:5)

正如@juanmf在评论中提到的,在命令中添加--user 0选项可以解决我的问题。结果命令如下所示:

am start --user 0 -a android.intent.action.VIEW -n com.android.browser/com.android.browser.BrowserActivity

答案 2 :(得分:1)

将Samsung Galaxy Tab Active 2平板电脑升级到Android 9之后,我收到此错误。经过大量搜索,我发现此post建议关闭开发人员选项,重新启动平板电脑,然后重新打开开发人员选项。我最后只是关闭USB调试,然后重新启动,然后重新打开USB调试,然后一切正常。

答案 3 :(得分:-2)

  

权限只是您需要在清单中添加的一行代码,以通知您访问这些资源并请求android允许这些资源使用。   enter image description here

1)我刚添加了一个包含权限的示例。

2)在Linux中有root用户,组和其他人。 0到达root,UID不能为负,其值在0 - 999之间。见link

答案 4 :(得分:-11)

1)在linux中,每个用户都有一个id号。 0和-2是用户ID(UID)。 0是root,-2是一些随机用户(可能不是一个人,它可能只是因内部原因而使用的假帐户)。

2)任何关于Linux的书。 Android只是Linux上的图形框架。

3)是的,只需添加权限。