Android 使用 Google 的位置服务对话框

Posted

技术标签:

【中文标题】Android 使用 Google 的位置服务对话框【英文标题】:Android Use Google's location service dialog 【发布时间】:2017-04-05 09:04:43 【问题描述】:

我在我的应用程序中使用地理围栏。如果用户在第一次设备运行后第一次切换位置,我们会要求他同意谷歌位置。但是如果用户不同意,地理围栏的初始化会返回错误代码 1000。

有什么方法可以再次要求我在我的应用中使用 Google 位置信息吗?

我知道this questin,但此对话框仅在首次启动位置设置时启动。如果用户拒绝,恕我直言,无法显示对话框。或者有什么办法吗?

谢谢你的回答

【问题讨论】:

不清楚你在问什么。什么会阻止您再次提示用户? 【参考方案1】:

正如您在问题中所评论的那样,我不确定您在问什么,但您可以使用shouldShowRequestPermissionRationale 测试用户最初是否不同意位置权限。

下面是一些基于我使用的Requestion Permissions 文档的扩展代码,您可能会发现这些代码对您有所帮助。

    if (ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED
            && ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) 

        Log.d(TAG, "checkMyPermissions ( " + permissionRequestCode + ") : Permissions FAILED");
        // Should we show an explanation?

        if (ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.ACCESS_FINE_LOCATION)) 
            // Show an explanation to the user *asynchronously* -- don't block
            // this thread waiting for the user's response! After the user
            // sees the explanation, try again to request the permission.
            new AlertDialog.Builder(this)
                    .setMessage("In order to show data this app requires location permissions")
                    .setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() 
                        @Override
                        public void onClick(DialogInterface dialog, int which) 
                            ActivityCompat.requestPermissions(MainActivity.this,
                                    new String[]Manifest.permission.ACCESS_FINE_LOCATION,
                                    permissionRequestCode);
                        
                    )
                    .setNegativeButton(android.R.string.cancel, null)
                    .show();

         else 
            ActivityCompat.requestPermissions(this,
                    new String[]Manifest.permission.ACCESS_FINE_LOCATION,
                    permissionRequestCode);
        
        return false;
     else 
        Log.d(TAG, "checkMyPermissions ( " + permissionRequestCode + ") : Permissions Passed");
        return true;
    

【讨论】:

他询问的是 Google 的位置服务对话框 (i.stack.imgur.com/ccg4k.png),而不是自定义权限请求。

以上是关于Android 使用 Google 的位置服务对话框的主要内容,如果未能解决你的问题,请参考以下文章

如果在后台使用位置,更新到 Android 11 是不是需要应用显示另一个位置权限对话框?

Google Play 服务 7.0 设置对话框

使用哪个 API 访问 Android 设备上的 GPS 位置? Android API 或 Google 位置服务 API

使用Google Play服务位置API来监听位置服务更新

Android位置与Google Play服务[重复]

Google Play 服务 - 位置 Xamarin Android