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

내가 그 일을하고 있지만 처음 권한 부여 응용 프로그램을 닫을 때 했어 .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(); 
    } 
관련 문제