首页 > 解决方案 > 在 WEAR OS 上启动 gmap 所需的 READ_SETTINGS 权限

问题描述

我的 Android 应用必须在 Wear OS 上启动 gmap

    Uri gmmIntentUri = Uri.parse("https://www.google.com/maps/search/?api=1&query=" +Uri.encode( string));
    Intent mapIntent = new Intent(ACTION_VIEW, gmmIntentUri);
   // mapIntent.setPackage("com.google.android.apps.maps");
    if (mapIntent.resolveActivity(activity.getPackageManager()) != null) {
        activity.startActivity(mapIntent);
    }

但我收到一个错误,说 Permission denial... 它想要 com.google.android.wearable.READ_SETTINGS

如果我把这个

<uses-permission android:name="com.google.android.wearable.READ_SETTINGS" />

在清单中然后我得到同样的错误。

我无法以类似于此的方式以编程方式请求许可

 if (ContextCompat.checkSelfPermission(activity, Manifest.permission.READ_SETTINGS)
                    == PackageManager.PERMISSION_GRANTED) {
                Log.d("permissions","granted");
            } else {
                // Show rationale and request permission.
                ActivityCompat.requestPermissions(activity,
                        new String[]{Manifest.permission.READ_SETTINGS},
                        MY_LOCATION_REQUEST_CODE);

            }

因为找不到那个常数。编写完整的 com.google.android.wearable.READ_SETTINGS 字符串没有用处。

我不明白为什么需要 READ_SETTINGS。怎么解决?

标签: javaandroidgoogle-mapsandroid-permissionswear-os

解决方案


wearOS 上的 Google 地图无法处理Uri.parse("https://www.google.com/maps/search/?api=1&query=" +Uri.encode( string)) 或采用文档中建议的这种格式Uri gmmIntentUri = Uri.parse("geo:0,0?q=1600 Amphitheatre Parkway, Mountain+View, California")。虽然手机上的相同意图会启动谷歌地图并向您显示建议列表。

我的猜测是,wearOS 上的地图应用程序是轻量级的,您只能在特定城市或地区搜索某些内容,如下所示:

// Searches for 'Main Street' near San Francisco
Uri gmmIntentUri = Uri.parse("geo:37.7749,-122.4194?q=101+main+street");

以下链接显示了在 Android 上使用的 Google 地图意图示例:https ://developers.google.com/maps/documentation/urls/android-intents

对于错误:

com.google.android.wearable.READ_SETTINGS

您不需要在权限中添加此内容,但请检查您的 Wear 应用清单是否有此内容:

<uses-feature android:name="android.hardware.type.watch" />

推荐阅读