Intereting Posts
Использование `onRetainCustomNonConfigurationInstance` для сохранения данных при изменении конфигурации Android: разрешить портрет и пейзаж для планшетов, но заставить портрет на телефоне? Могу ли я использовать tcpdump для получения HTTP-запросов, заголовка ответа и тела ответа? Как создать тень для кнопки Использование listpreference и получение ключа работает, но не кнопка ok LoaderManager с несколькими загрузчиками: как получить правильный загрузчик курсора Переход общего элемента: активность в фрагмент, вложенный в другую активность Измените сгенерированное имя apk из "app-debug.apk" OverridePendingTransition на адаптере gridview Кордова 3.4 – Обнаружение события клавиатуры Добавить видео в twitter Инструмент Android InstrumentationTestRunner для вывода хадсона Android: setSelection, не влияющий на Spinner Запуск звукового файла при ответе на вызов Как использовать и настраивать новый AlertDialog из appCompat 22.1 и выше

Разрешение отказа: startActivity запрашивает запуск как пользователь -2, но вызывает от пользователя 0; Это требует android.permission.INTERACT_ACROSS_USERS_FULL

Когда я пытаюсь использовать команду 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. Где я могу найти информацию об этих идентификаторах?

3. что я должен делать, просто добавьте разрешения? Я не хочу добавлять разрешения, о которых я ничего не знаю о них. Может ли кто-нибудь мне помочь, очень спасибо!

Solutions Collecting From Web of "Разрешение отказа: startActivity запрашивает запуск как пользователь -2, но вызывает от пользователя 0; Это требует android.permission.INTERACT_ACROSS_USERS_FULL"

1) В linux каждый пользователь имеет номер id. 0 и -2 – идентификаторы пользователей (UID). 0 – корень, -2 – случайный пользователь (который может не быть человеком, он может быть просто фальшивой учетной записью, используемой по внутренним причинам).

2) Любая книга по Linux. Android – это всего лишь графическая платформа поверх Linux.

3) Да, просто добавьте разрешение.

Пользователь 0 и пользователь -2, которые вы видите, являются файлами 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 или подписано с тем же сертификатом, что и другое приложение на системном изображении, объявляющем разрешение. Другими словами, это разрешение signature или signatureOrSystem .

Как упоминалось в комментарии --user 0 , добавление опции --user 0 к команде разрешило проблему для меня. Полученная команда будет выглядеть так:

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

Разрешения – это всего лишь строка кода, которую нужно добавить в манифест, чтобы сообщить, что вы обращаетесь к этим ресурсам и запрашиваете андроид, чтобы эти ресурсы могли использоваться. Введите описание изображения здесь

1) я просто добавил пример, содержащий разрешение.

2) В Linux есть пользователь root, группа и другие. 0 доходит до корня и UID не может быть отрицательным, его значение находится между 0 – 999. См. Эту ссылку