我已经在我的主应用程序和配套的 Wear 应用程序中实现了一个 WearableListenerService 。在 list 中,该服务需要声明为 android:exported="true" (或根本不声明并保留默认为 true ),因为它是由 Google Play 服务启动的。系统上的任何应用程序都可以调用没有权限的导出服务,但我找不到正确的权限添加到服务声明中以保护它。我已经使用 pm list permissions 查看了手机和 Wear 设备上的权限,但没有看到任何我需要的东西。

  • 是否有我可以/应该添加的权限来保护我的服务?
  • 如果不是,通过检查调用者的包名来手动保护服务是否是一个好主意?
  • 最佳答案

    了解如何在 Android Wear 上实现 WearableListenerService 的最佳方式是查看 SDK 提供的现有示例之一。如果您查看 $SDK/samples/android-20/wearable/DataLayer 中包含的 DataLayer 示例,它具有您想要执行的操作的完整实现。

    如果您查看可穿戴设备方面的 AndroidManifest.xml,您可以看到它包含以下内容:

        <meta-data
                android:name="com.google.android.gms.version"
                android:value="@integer/google_play_services_version" />
    
        <service
                android:name=".DataLayerListenerService" >
            <intent-filter>
                <action android:name="com.google.android.gms.wearable.BIND_LISTENER" />
            </intent-filter>
        </service>
    

    出于您的安全考虑……当我们在 list 中声明服务并为其添加过滤器时,它会自动成为导出的服务。所以一般来说,其他应用程序可以绑定(bind)到该服务。对于 WearableListenerService,框架中会进行一项安全检查,以确保绑定(bind)到该服务的代理是 Google Play 服务,因此其他人无法真正绑定(bind)到该服务,除非应用程序开发人员在这种情况下公开其他 Intent 过滤器目的是让其他人访问它。

    因此,如果您以与 Wear SDK 示例相同的方式实现您的代码,您的应用程序应该是安全的,您无需担心任何额外的权限等。

    关于android - WearableListenerService 的权限,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24914161/

    10-11 19:24
    查看更多