Erlaubnis Denial: startActivity bittet um als Benutzer ausführen -2, ruft aber aus user 0; dies erfordert android.die Genehmigung.INTERACT_ACROSS_USERS_FULL
Wenn ich versuche die Verwendung von android 'bin' - Befehl zum starten einer Aktivität ,es ist falsch, unter 4.2 Plattform(ich habe versucht , es ist ok unter 2.3-version).Der code ist wie folgt
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);
}
und der Fehler ist wie folgt:
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)
Ich will wissen,
1.was hat sich der user -2 und 0 bedeutet?
2.wo finde ich die details über diese ids?
3.was sollte ich tun,fügen Sie einfach die Berechtigungen? Ich will nicht, um die Berechtigungen hinzuzufügen, die ich weiß nichts über Sie.Könnte mir jemand helfen,sehr vielen Dank!
InformationsquelleAutor der Frage pangang | 2013-08-12
Du musst angemeldet sein, um einen Kommentar abzugeben.
1)In linux jeder user hat eine id-Nummer. 0 und -2 sind Benutzer-IDs (UIDs). 0 ist root, -2 ist einige zufällige Benutzer (die nicht eine person, es kann nur einen fake account für die interne Gründe).
2)ein Buch über Linux. Android ist nur eine grafische framework on top of Linux.
3)ja, fügen Sie einfach die Berechtigung.
InformationsquelleAutor der Antwort Gabe Sechan
Die Benutzer 0-und Benutzer--2 Sie sehen, sind Rahmen Benutzerkennungen, die nicht Linux-uids. Von android.os.UserHandlekönnen Sie sehen, dass
userId
0 ist das Gerät Besitzer,USER_OWNER
(das ist ganz anders als die Linux -uid
0, die Wurzel).userId
-1 repräsentiert alle Benutzer (USER_ALL
),userId
-2 stellt den aktuellen Benutzer (USER_CURRENT
),userId
-3 repräsentiert den aktuellen Benutzer oder für sich selbst (CURRENT_OR_SELF
), unduserId
-10000 stellt den null-Benutzer (USER_NULL
).Soweit die Erlaubnis
INTERACT_ACROSS_USERS_FULL
können Sie erklären es in Ihrer manifest-Datei, aber Sie wird nur dann gewährt, wenn Sie Ihre app in den Android-system-image oder mit demselben Zertifikat signiert sind, als einer anderen Anwendung in das system-image, erklärt der Erlaubnis. In anderen Worten, es ist einesignature
odersignatureOrSystem
Berechtigung.InformationsquelleAutor der Antwort Paul Ratazzi
Als @juanmf erwähnt in einem Kommentar, hinzufügen der
--user 0
option, um den Befehl behoben das Problem für mich. Der resultierende Befehl würde wie folgt Aussehen:InformationsquelleAutor der Antwort TheIT
1) habe ich nur noch ein Beispiel mit freundlicher Genehmigung.
2) In Linux gibt es root-Benutzer ,Gruppe und andere . 0 kommt um root und UID kann nicht negativ sein, der Wert ist zwischen 0 - 999. Sehen Sie diese link
InformationsquelleAutor der Antwort Viswanath Lekshmanan