允许精确位置权限替换片段

时间:2016-06-06 12:00:50

标签: android android-fragments android-studio android-permissions

我想问用户他是否想要授予许可以获得他的好位置,并且只有在他授予它时我才想要替换片段并打开定位器片段。在定位器片段中,有一些用户可以根据其位置看到的商店。如果他不允许访问好位置,我想向他显示正确的信息。这是代码:

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();

应用程序当前正在崩溃,因为它会立即开始替换片段,它会崩溃,因为它会在用户选择批准或不批准位置之前进行替换。

所以基本上我需要一些循环的想法或某种,如果他选择不允许权限并向他显示足够的消息,则会忽略用户请求。如果他选择授予那么我需要像普通的那样替换片段。

1 个答案:

答案 0 :(得分: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();
  }