Как исправить ошибку java.lang.SecurityException: у вызывающего абонента отсутствует требуемое разрешение com.google.android.things.permission.USE_PERIPHERAL_IO?

Я пытаюсь создать и запустить проект Android Things на Raspberry Pi 3. Файлы найдены здесь. Я подключен к моему Raspberry Pi 3 через Ethernet. Я подключил кабель Ethernet напрямую от моего ноутбука к rPi и использовал общий доступ к Интернету. Затем я использовал adb connect для подключения к устройству, и оно успешно подключается.

Я бегу:

Android Studio 3.1.2
Build #AI-173.4720617, built on April 13, 2018
JRE: 1.8.0_152-release-1024-b01 x86_64
JVM: OpenJDK 64-Bit Server VM by JetBrains s.r.o
Mac OS X 10.12.6

В Android Studio были внесены изменения, поэтому мне пришлось немного изменить код. Я скачал файлы и вместо этого обновил PeripheralManagerService до PeripheralManager.

PeripheralManager pioService = PeripheralManager.getInstance();

Когда я нажимаю кнопку «Выполнить», я получаю следующую ошибку (имейте в виду, что я уже добавил следующее разрешение в файл манифеста Android над разделом приложения):

<uses-permission android:name="com.google.android.things.permission.USE_PERIPHERAL_IO"/>

Пожалуйста, помогите мне понять, чего мне еще не хватает. Спасибо!

06-08 01:43:28.746 3598-3598/? I/zygote: Late-enabling -Xcheck:jni 06-08 01:43:28.993 3598-3598/apps.hackstermia.buttonthings I/MainActivity: Starting ButtonActivity
06-08 01:43:29.013 3598-3598/apps.hackstermia.buttonthings I/MainActivity: Configuring GPIO pins
06-08 01:43:29.017 3598-3598/apps.hackstermia.buttonthings D/AndroidRuntime: Shutting down VM
06-08 01:43:29.028 3598-3598/apps.hackstermia.buttonthings E/AndroidRuntime: FATAL EXCEPTION: main
    Process: apps.hackstermia.buttonthings, PID: 3598
    java.lang.RuntimeException: Unable to start activity ComponentInfo{apps.hackstermia.buttonthings/apps.hackstermia.buttonthings.MainActivity}: java.lang.SecurityException: Caller lacks required permission com.google.android.things.permission.USE_PERIPHERAL_IO
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2778)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2856)
        at android.app.ActivityThread.-wrap11(Unknown Source:0)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1589)
        at android.os.Handler.dispatchMessage(Handler.java:106)
        at android.os.Looper.loop(Looper.java:164)
        at android.app.ActivityThread.main(ActivityThread.java:6494)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)
     Caused by: java.lang.SecurityException: Caller lacks required permission com.google.android.things.permission.USE_PERIPHERAL_IO
        at android.os.Parcel.readException(Parcel.java:2005)
        at android.os.Parcel.readException(Parcel.java:1951)
        at com.google.android.things.pio.IPeripheralManagerClient$Stub$Proxy.GetGpioClient(IPeripheralManagerClient.java:759)
        at com.google.android.things.pio.GpioImpl.<init>(GpioImpl.java:50)
        at com.google.android.things.pio.PeripheralManager.openGpio(PeripheralManager.java:197)
        at apps.hackstermia.buttonthings.MainActivity.onCreate(MainActivity.java:26)
        at android.app.Activity.performCreate(Activity.java:7010)
        at android.app.Activity.performCreate(Activity.java:7001)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1214)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2731)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2856) 
        at android.app.ActivityThread.-wrap11(Unknown Source:0) 
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1589) 
        at android.os.Handler.dispatchMessage(Handler.java:106) 
        at android.os.Looper.loop(Looper.java:164) 
        at android.app.ActivityThread.main(ActivityThread.java:6494) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807) 
06-08 01:43:29.047 3598-3598/apps.hackstermia.buttonthings I/Process: Sending signal. PID: 3598 SIG: 9

person Bob R.    schedule 08.06.2018    source источник
comment
Возможный дубликат разрешения Android не работает, даже если я объявили это   -  person Zoe    schedule 08.06.2018
comment
@ Зоя, нет. Вы не должны думать, что Android Things работает точно так же, как Android для мобильных устройств.   -  person Onik    schedule 08.06.2018


Ответы (5)


Во-первых, следующие строки должны быть включены в AndroidManifest непосредственно перед application tag

<uses-permission android:name="com.google.android.things.permission.USE_PERIPHERAL_IO" />
<uses-permission android:name="com.google.android.things.permission.MANAGE_INPUT_DRIVERS" />

Затем, если вы устанавливаете приложение через adb, вы должны установить <APK> с опцией -g, как рекомендовано @Devunwired здесь

adb install -g <APK>
person ierturk    schedule 22.09.2018

друзья~!

У меня была такая же проблема с Android Studio 3.1.3, RaspberryPi 3 и AndroidThings. Эта платформа убивала мое приложение «мигание», потому что у меня не было разрешения «[..] USE_PERIPHERAL_IO».

Для моей проблемы решение заключалось в добавлении этого предложения:

<uses-permission android:name="com.google.android.things.permission.USE_PERIPHERAL_IO"/>
<uses-permission android:name="com.google.android.things.permission.MANAGE_INPUT_DRIVERS" />

в мой файл манифеста Android.

Спасибо, кто поможет :))

person Danielx909    schedule 13.06.2018

Спасибо всем за ваш вклад.

Я обнаружил, что разрешение в файле манифеста должно быть прямым дочерним элементом или за пределами приложения.

person Bob R.    schedule 12.06.2018

Я была такая же проблема. Пробовал разные подходы, как упоминалось выше. Что действительно работает для меня 1. Обновите свою студию Android до последней версии. У меня была 3.0.1. После обновления это 3.1.3 2. Обновите версию ОС Android до последней версии. Было 0,6. После обновления это 1.0.1. 3. Установите эти разрешения в манифесте Android <uses-permission android:name="com.google.android.things.permission.USE_PERIPHERAL_IO"/> <uses-permission android:name="com.google.android.things.permission.MANAGE_INPUT_DRIVERS" />

надеюсь, что эти шаги заставят ваши Android работать

person Liangjun    schedule 13.06.2018

В зависимости от версии Android Studio тюрьмы применяются и предоставляются при обновлении и установке или только при установке (в более старых версиях).

Перезагрузка устройства должна исправить это, удаление и повторная установка приложения также должны исправить это.

person shalafi    schedule 08.06.2018