2016-12-08 5 views
1

Я пытаюсь настроить разрешение местоположения в android, когда я устанавливаю приложение на устройстве, автоматически устройство назначает разрешение на размещение приложения (используя ManifestFile). если я вручную отключу местоположение с разрешения & запустите приложение снова. Он не показывает мне всплывающее окно (которое я запрограммировал, чтобы спросить).Разрешения на выполнение приложений для Android Недоступно

private const int LOCATION_GROUP_PERMISSION_REQUEST = 1; 
if ((int)Build.VERSION.SdkInt > 22) { 
      if (ContextCompat.CheckSelfPermission (this, Android.Manifest.Permission_group.Location) != Android.Content.PM.Permission.Granted) { 
       Toast.MakeText (this, "Something Really wrong", ToastLength.Short).Show(); 
       var data = ActivityCompat.ShouldShowRequestPermissionRationale (this, Manifest.Permission_group.Location); 
       if (!data) { 
        AlertDialog.Builder builder; 
        builder = new AlertDialog.Builder (this); 
        builder.SetTitle ("Location Permission is Disabled"); 
        builder.SetMessage ("Location permission is needed "); 
        builder.SetCancelable (false); 
        builder.SetPositiveButton ("Enable", delegate { 
         ActivityCompat.RequestPermissions (this, new String [] { Manifest.Permission_group.Location }, 
                 LOCATION_GROUP_PERMISSION_REQUEST); 
        }); 
        builder.Show(); 
       } else { 

        ActivityCompat.RequestPermissions (this, new String [] { Manifest.Permission_group.Location }, 
              LOCATION_GROUP_PERMISSION_REQUEST); 
       } 

      } else { 
       GoToActivity(); 
      } 
     } 

переменные данные всегда возвращают ложные длину

 public override void OnRequestPermissionsResult (int requestCode, string [] permissions, Android.Content.PM.Permission [] grantResults) 
    { 

     if (requestCode == LOCATION_GROUP_PERMISSION_REQUEST) { 

      for (int i = 0; i < permissions.Length; i++) { 
       if (grantResults [i] == Android.Content.PM.Permission.Granted) { 
        Toast.MakeText (this, "Param granted", ToastLength.Short).Show(); 
       } else if (grantResults [i] == Android.Content.PM.Permission.Denied) { 
        Toast.MakeText (this, "param Denied", ToastLength.Short).Show(); 
       } 
      } 
     } else { 
      base.OnRequestPermissionsResult (requestCode, permissions, grantResults); 
     } 

    } 

// разрешений Нулевой

+0

Возможно ли вы проверили «Никогда не спрашивать» checkbox в какой-то момент? –

+0

Также, на каком уровне API работает устройство? –

+0

Я работаю на Google Emulator API 25 – imrohit

ответ

2

Продолжительности разрешения только от уровня Api 23 и выше Я знаю, что этот ответ не идеальный ответ на ваш вопрос, я ответил на родной, так что, по крайней мере, это поможет вам преобразовать его в xamarin.

 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { 
       if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) 
         != PackageManager.PERMISSION_GRANTED 
         || ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) 
         != PackageManager.PERMISSION_GRANTED) { 
        // permissions have not been granted. 
         requestPermissions(); 

       } 
      } 
     } 


private void requestPermissions() { 

     if (ActivityCompat.shouldShowRequestPermissionRationale(this, 
       Manifest.permission.ACCESS_COARSE_LOCATION) 
       || ActivityCompat.shouldShowRequestPermissionRationale(this, 
       Manifest.permission.ACCESS_FINE_LOCATION)) { 

      // Provide an additional rationale to the user if the permission was not granted 
      // and the user would benefit from additional context for the use of the permission. 
      // For example, if the request has been denied previously. 
      // this is my custom dialog change as per ur requirement to notify user 
      showPermissionRationaleDialog("Locations permissions are needed to demonstrate access.", PERMISSIONS_LOCATION, false); 
      //when user click ok in dialog you have to call requestForPermission method 
     } else { 
      // permissions have not been granted yet. Request them directly. 
      requestForPermission(PERMISSIONS_LOCATION); 
     } 
    } 

// запрос генерации

private void requestForPermission(final String[] permissions) { 
     ActivityCompat.requestPermissions(NwSelectionActivity.this, permissions, REQUEST_CODE); 
    } 

// Результат обработки

@Override 
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, 
              @NonNull int[] grantResults) { 

     if (requestCode == REQUEST_CODE) { 

      if (PermissionUtil.verifyPermissions(grantResults)) { 
       // All required permissions have been granted, 

      } else { 
       boolean showRationale = ActivityCompat.shouldShowRequestPermissionRationale(this, 
         permissions[0]); 
       Log.i(TAG, "Locations permissions were NOT granted."); 
       if (!showRationale) { 
    //here you show dialog to user to manually enable location permission in setting 
        showPermissionRationaleDialog("Allow App to access your locations. Tap Setting > Permissions, and turn Location on.", PERMISSIONS_LOCATION, true); 
       } 
      } 


     } else { 
      super.onRequestPermissionsResult(requestCode, permissions, grantResults); 
     } 
    } 
+0

Я сделал все то же самое и ACCESS_FINE_LOCATION & ACCESS_FINE_LOCATION, даже я отключил кнопку из разрешений. Когда я проверяю Permission_group.Location, тогда он становится ложным. Я использовал приведенный выше код & onRequestPermissionsResult мои разрешения, которые пустые. – imrohit

+0

еще раз вы должны проверить статус Rationale в противном случае, чтобы дополнительно проверить, что это разрешено вручную здесь // if (grantResults [i] == Android.Content.PM.Permission.Denied) – Nas

0

Проверьте, если разрешение было отказано или предоставлено в onRequestPermissionsResult.

Если разрешение было отклонено ранее, на этот раз в диалоговом окне разрешений появится галочка .

Звонок долженShowRequestPermissionRationale, чтобы узнать, проверен ли пользователь Никогда не спрашивайте снова. shouldShowRequestPermissionRationale метод возвращает лжи, только если выбранный пользователь никогда не переспрашивать или политика устройства запрещает приложение от того, что разрешение:

см https://stackoverflow.com/a/34612503/4623782 для получения дополнительной информации

+0

Я компилирую API 25, и он никогда не спрашивал меня прежде чем включить это, я никогда не проверял это. Он проверил, что Permission_group.Location отключен, а затем он отображает всплывающее окно, но когда я нажимаю кнопку enable, ничего не происходит – imrohit

Смежные вопросы