16

当我尝试使用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.我该怎么办,只需添加权限?我不想添加我对它们一无所知的权限。谁能帮助我,非常感谢!

4

5 回答 5

13

您看到的用户 0 和用户 -2 是框架userId,而不是 Linux uid。从android.os.UserHandle可以看到userId0 是设备所有者,USER_OWNER(这与 Linux 0 完全不同uid,它是 root)。 userId-1 代表所有用户(USER_ALL),userId-2 代表当前用户(USER_CURRENT),userId-3 代表当前用户或自己(CURRENT_OR_SELF),- userId10000 代表空用户(USER_NULL)。

至于权限INTERACT_ACROSS_USERS_FULL,您可以在清单文件中声明它,但只有当您的应用在 Android 系统映像中或使用与声明权限的系统映像中的另一个应用程序相同的证书签名时,您才会被授予权限。换句话说,它是一个signaturesignatureOrSystem许可。

于 2014-02-27T09:34:57.273 回答
5

正如@juanmf 在评论中提到的那样,向--user 0命令添加选项为我解决了这个问题。生成的命令如下所示:

am start --user 0 -a android.intent.action.VIEW -n com.android.browser/com.android.browser.BrowserActivity
于 2016-01-06T02:45:06.210 回答
1

在我的三星 Galaxy Tab Active 2 平板电脑升级到 Android 9 后,我收到了这个错误。经过大量搜索,我发现这篇文章建议关闭开发人员选项,重新启动平板电脑,然后重新打开开发人员选项。我最终只是关闭了 USB 调试,重新启动,然后重新打开 USB 调试,之后一切正常。

于 2019-06-20T19:37:49.483 回答
-2

权限只是您需要在清单中添加的一行代码,以通知您访问这些资源并请求 android 允许使用这些资源。 在此处输入图像描述

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

2)在Linux中有root用户,组和其他。0 表示 root 并且 UID 不能为负值,其值介于 0 - 999 之间。请参阅此链接

于 2013-08-12T03:48:03.677 回答
-14

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

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

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

于 2013-08-12T03:42:41.140 回答