权限被拒绝无法获取位置 Android

Posted

技术标签:

【中文标题】权限被拒绝无法获取位置 Android【英文标题】:Permission Denied cannot get location Android 【发布时间】:2018-11-14 19:46:09 【问题描述】:

我在初始设置时为 android 上的应用程序提供权限 跟踪地理位置和移动 lacs、小区 ID 和国家代码以及塔代码。我在中途收到以下错误 - “Permission Denied cannot get location Android”,即最初在 android 上安装应用程序时,它最初提供地理位置,但在中途它停止获取地理位置。

将非常感谢上述解决方案

请在下面找到代码 -

private void requestStoragePermission() 
    Dexter.withActivity(this)
            .withPermissions(
                    Manifest.permission.WAKE_LOCK,
                    Manifest.permission.READ_CONTACTS,
                    Manifest.permission.ACCESS_NETWORK_STATE,
                    Manifest.permission.ACCESS_WIFI_STATE,
                    Manifest.permission.READ_PHONE_STATE,
                    Manifest.permission.ACCESS_COARSE_LOCATION,
                    Manifest.permission.ACCESS_FINE_LOCATION)
            .withListener(new MultiplePermissionsListener() 
                @Override
                public void onPermissionsChecked(MultiplePermissionsReport report) 
                    // check if all permissions are granted
                    if (report.areAllPermissionsGranted()) 
                        Toast.makeText(getApplicationContext(), "All permissions are granted!", Toast.LENGTH_SHORT).show();
                    

                    // check for permanent denial of any permission
                    if (report.isAnyPermissionPermanentlyDenied()) 
                        // show alert dialog navigating to Settings
                        showSettingsDialog();
                    
                

                @Override
                public void onPermissionRationaleShouldBeShown(List<PermissionRequest> permissions, PermissionToken token) 
                    token.continuePermissionRequest();
                
            ).
            withErrorListener(new PermissionRequestErrorListener() 
                @Override
                public void onError(DexterError error) 
                    Toast.makeText(getApplicationContext(), "Error occurred! ", Toast.LENGTH_SHORT).show();
                
            )
            .onSameThread()
            .check();

【问题讨论】:

用户有requested location permissions吗? 是的,我已经事先授予了所有必要的权限 在应用程序中包含弹出提示?只是要求澄清一下,因为您的问题并没有立即明确。 不包括弹出提示 我最初正在获取位置权限并已交叉检查位置设置和权限是否已全部设置。甚至 LAC 和 CID 以及国家/地区代码也没有中途获取/停止 您需要明确请求用户在运行时的位置权限,因为位置被归类为dangerous permission。否则,Android 将拒绝访问位置信息,您的情况目前正在发生这种情况。 【参考方案1】:

获取位置数据然后需要运行时权限试试下面的代码..

如果不存在,则将内容添加到您的应用中,以及如何处理运行时权限。

试试这个,确保你的应用程序级别的 gradle 文件在 compile sdk 版本中是最新的。喜欢

 compileSdkVersion 27

然后在 android manifest 文件中添加权限。

 <uses-permission android:name="android.permission.INTERNET" />
 <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
 <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

在检查运行时权限后,如下所示,制作两个方法。

/** 
 * this method check permission and return current state of permission need. 

 */ 
private boolean checkPermissions()  
int permissionState = ActivityCompat.checkSelfPermission(this,
        Manifest.permission.ACCESS_FINE_LOCATION); 
return permissionState == PackageManager.PERMISSION_GRANTED;
  

/** 
* this method request to permission asked. 
*/ 
private void requestPermissions()  
 boolean shouldProvideRationale =
        ActivityCompat.shouldShowRequestPermissionRationale(this,
                Manifest.permission.ACCESS_FINE_LOCATION); 

if (shouldProvideRationale) 
    Log.i(TAG, "Displaying permission rationale to provide additional context.");
 else  
    Log.i(TAG, "Requesting permission");
    // previously and checked "Never ask again". 
    ActivityCompat.requestPermissions(MainActivity.this,
            new String[]Manifest.permission.ACCESS_FINE_LOCATION,
            REQUEST_PERMISSIONS_REQUEST_CODE); 
    
  

  /** 
  * Callback received when a permissions request has been completed. 
  */ 
  @Override 
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,
                                   @NonNull int[] grantResults) 
Log.i(TAG, "onRequestPermissionResult");
if (requestCode == REQUEST_PERMISSIONS_REQUEST_CODE) 
    if (grantResults.length <= 0) 
        // If user interaction was interrupted, the permission request is cancelled and you 
        // receive empty arrays. 
        Log.i(TAG, "User interaction was cancelled.");
     else if (grantResults[0] == PackageManager.PERMISSION_GRANTED) 
        // Permission was granted. Kick off the process of building and connecting 
        // GoogleApiClient. 
        buildGoogleApiClient(); 
     else  
        // Permission denied. 

     
 
 

然后当调用获取位置方法时然后像下面检查 在 onCreateview 方法中

 // Check if the user revoked runtime permissions.
if (!checkPermissions()) 
    requestPermissions();


buildGoogleApiClient();

【讨论】:

这些设置我已经实现了,但在中途我收到错误 - 权限被拒绝 我在初始设置中获得了完美的位置,但不幸的是在中途我收到错误“permission-denied” 先你是否允许 是的,我最初已允许权限,即 PERMISSION_GRANTED 检查哪个权限被拒绝。

以上是关于权限被拒绝无法获取位置 Android的主要内容,如果未能解决你的问题,请参考以下文章

呼叫需要权限,用户在尝试获取位置时可能会拒绝该权限

html5获取地理位置,如果用户拒绝了,之后每次加载都提示:拒绝获取地理位置,如何获取权限:如果用

即使用户授予位置权限检查,三星 note 20 也总是会被拒绝

html5获取地理位置,如果用户拒绝了,之后每次加载都提示:拒绝获取地理位置,如何获取权限:如果用

用户拒绝激活位置时无法获取 - React Native Geolocation Service

Android6.0动态获取权限