如何只允许我的随播手表应用程序连接到手持设备上的可穿戴式监听服务?

时间:2016-11-08 18:53:57

标签: android android-service wear-os android-permissions android-security

我想确保我的掌上电脑上运行的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

我已将数据过滤器应用于我的服务但是我想强制执行只有MY应用程序可以启动我的服务并且过滤器方法似乎不够。

2 个答案:

答案 0 :(得分:1)

您的手表应用和手持应用从不直接互相交谈。所有数据层API都通过Google Play服务(例外的com.google.android.gms行) - 首先在Wear端,然后在手持端。

鉴于此,无法添加通过数据层保护通信的自定义权限(因为Google Play服务应用永远不会添加您的自定义权限)。

答案 1 :(得分:1)

对于任何喜欢自己的人而言,担心恶意应用程序可能会尝试将非预期的有效负载插入可穿戴式手持设备数据流中,本文有助于让我放心。

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