0

Я хочу спросить пользователя, хочет ли он предоставить разрешение на его точное местоположение, и только если он предоставит его, я хочу заменить фрагмент и открыть фрагмент локатора. В фрагментах локатора есть некоторые магазины, которые пользователь может видеть по своему местоположению. Если он не разрешает доступ к прекрасному местоположению, я хочу показать ему правильное сообщение. Это код:Разрешить удаленное определение места для замены фрагмента

else if (id == R.id.nav_locator) { 
     ActivityCompat.requestPermissions(this, 
       new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, 
       1); 
     fragment = new LocatorFragment(); 
     FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); 
     ft.replace(R.id.fragmentlayout, fragment); 
     ft.commit(); 

Применение в настоящее время сбой, поскольку он будет немедленно начать заменить фрагмент, и он будет врезаться, потому что заменить, прежде чем пользователь может выбрать, чтобы утвердить или не утвердить местоположение.

Так что в принципе мне нужно идея какой-то петли или что-то, которое будет игнорировать запрос пользователя, если он не разрешит разрешение и покажет ему адекватное сообщение. И если он решил предоставить, мне нужно заменить фрагмент как обычный.

+0

Переместить фрагментный код в 'onRequestPermissionsResult' .. !! – AndiGeeky

+0

Я сделал, что он работает, но в первый раз, когда я предоставляю разрешение на приложение close .O –

+0

Вы имеете в виду какую-либо ошибку там, так что приложение близко или просто ваше требование закрыть приложение? – AndiGeeky

ответ

1

Пожалуйста, проверьте ниже решение, надеемся, что он будет работать правильно для вас.

else if (id == R.id.nav_locator) 
{ 
    int result = ContextCompat.checkSelfPermission(context, Manifest.permission.ACCESS_FINE_LOCATION); 
    if (result == PackageManager.PERMISSION_GRANTED){ 

     goToNextFragment(); 

    } else { 

     requestForLocationPermission(); 
    } 
} 


    private void requestForLocationPermission() 
    { 

     if (ActivityCompat.shouldShowRequestPermissionRationale(activity,Manifest.permission.ACCESS_FINE_LOCATION)) 
     { 
     } 
     else { 

      ActivityCompat.requestPermissions(activity,new String[]{Manifest.permission.ACCESS_FINE_LOCATION},PERMISSION_REQUEST_CODE); 
     } 
    } 

    @Override 
    public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) 
    { 
     switch (requestCode) { 
     case PERMISSION_REQUEST_CODE: 
      if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { 
      goToNextFragment(); 
     } 
     break; 
    } 
} 


    public void goToNextFragment() 
    { 
     Fragment fragment = new LocatorFragment(); 
     FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); 
     ft.replace(R.id.fragmentlayout, fragment); 
     ft.commit(); 
    } 
Смежные вопросы