2

Я хочу, чтобы моя служба WearableListenerService, работающая на моем КПК, доступна только моему сопутствующему приложению. Я бы подумал, что создание пользовательского разрешения было бы маршрутом, однако я столкнулся с проблемами с этим подходом и не мог получить пригодный для носки, чтобы успешно привязываться к карманному компьютеру, я бы получил следующее исключение на своем карманном компьютере;Как разрешить только моему приложению смотреть приложение для подключения к моему слуховому слуху на портативном компьютере?

Permission Denial: Accessing service ComponentInfo{com.mypackage.android/com.mypackage.android.androidwear.service.WearListenerService} from pid=4868, uid=10014 requires com.mypackage.android.WATCHAPP 
WearableService: bind: Permission denied connecting to ServiceRecord[com.mypackage.android.androidwear.service.WearListenerService, events=1, bound=false, [Event[79380002: onMessageReceived, event=requestId=16741, action=/start-activity, dataSize=26, source=31c5457d]]] 
               java.lang.SecurityException: Not allowed to bind to service Intent { act=com.google.android.gms.wearable.BIND_LISTENER cmp=com.mypackage.android/.androidwear.service.WearListenerService } 
                at android.app.ContextImpl.bindServiceCommon(ContextImpl.java:1437) 
                at android.app.ContextImpl.bindService(ContextImpl.java:1395) 
                at android.content.ContextWrapper.bindService(ContextWrapper.java:632) 
                at android.content.ContextWrapper.bindService(ContextWrapper.java:632) 
                at android.content.ContextWrapper.bindService(ContextWrapper.java:632) 
                at aeim.a(:com.google.android.gms:6693) 
                at aeim.a(:com.google.android.gms:1378) 
                at aeim.handleMessage(:com.google.android.gms:1295) 
                at android.os.Handler.dispatchMessage(Handler.java:102) 
                at android.os.Looper.loop(Looper.java:158) 
                at android.os.HandlerThread.run(HandlerThread.java:61) 

Я попытался определение пользовательского разрешения в ряде способов, первоначально только карманном манифест, а затем в обеих манифестах, а также пробуя различные уровни защиты, нормальную, подпись, signatureOrSystem. Я даже подтвердил, что разрешение было успешно предоставлено моей носимой, запустив команду dumpsys;

declared permissions: 
    com.mypackage.android.WATCHAPP: prot=normal, INSTALLED 
requested permissions: 
    android.permission.WAKE_LOCK 
    com.mypackage.android.WATCHAPP 
install permissions: 
    com.mypackage.android.WATCHAPP: granted=true 
    android.permission.WAKE_LOCK: granted=true 

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

ответ

1

Ваше приложение для часов и карманное приложение никогда напрямую разговаривают друг с другом. Все API-интерфейсы уровня данных проходят через службы Google Play (линии com.google.android.gms вашего исключения) - сначала на стороне Wear, а затем на КПК.

Учитывая, что невозможно добавить настраиваемое разрешение, обеспечивающее связь по слою данных (поскольку приложение Служб Google Play никогда не добавит ваши собственные разрешения).

+0

Спасибо за ответ, это то, что я собрал из трассировки стека. При этом я все еще задаю вопрос, как, или, вернее, даже ограничить мое обслуживание таким, чтобы только мое приложение-компаньон могло взаимодействовать с ним? – RoLAN210

1

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

https://labs.mwrinfosecurity.com/blog/android-wear-security-analysis/