2016-07-08 4 views
1

휴대 전화의 위치가 사용 중지되었지만 아직 위치 정보가 토스트에서 승인되었습니다.실행시 권한 요청 Android 마시맬로가 작동하지 않음

@Override 
public void onCreate(@Nullable Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    if(Build.VERSION.SDK_INT>=23){ 

     showRunTimePermission(); 
    } 
} 

@Nullable 
@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 

    View view = inflater.inflate(R.layout.fragment_search_v2, container, 
      false); 




    return view; 
} 

// 위치가 사용 중지 된 경우 경고 대화 상자를 표시합니다.

private void showRunTimePermission() { 
    if(ContextCompat.checkSelfPermission(getActivity(), Manifest.permission.ACCESS_COARSE_LOCATION)!=PackageManager.PERMISSION_GRANTED || 
      ContextCompat.checkSelfPermission(getActivity(), Manifest.permission.ACCESS_FINE_LOCATION)!=PackageManager.PERMISSION_GRANTED){ 
     requestLocationPermission(); 
    }else{ 
     Toast.makeText(getActivity(), "Location already granted", Toast.LENGTH_SHORT).show(); 
    } 

} 

private void requestLocationPermission() { 
    if (ActivityCompat.shouldShowRequestPermissionRationale(getActivity(),Manifest.permission.ACCESS_COARSE_LOCATION) || ActivityCompat.shouldShowRequestPermissionRationale(getActivity(),Manifest.permission.ACCESS_FINE_LOCATION)){ 
     final AlertDialog locationDialog = new AlertDialog.Builder(getActivity()) 
       .setCancelable(false).create(); 
     View dialogView = View.inflate(getActivity(), R.layout.dialog_location_access, null); 
     TextView okBtn= (TextView) dialogView.findViewById(R.id.dialog_location_ok_button); 
     okBtn.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       ActivityCompat 
         .requestPermissions(getActivity(), PERMISSIONS_LOCATION, 
           LOCATION_PERMISSIONS_REQUEST); 
      } 
     }); 
     TextView denyBtn= (TextView) dialogView.findViewById(R.id.dialog_location_deny_button); 
     denyBtn.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       locationDialog.dismiss(); 
      } 
     }); 

     locationDialog.setView(dialogView); 

     locationDialog.show(); 

    }else{ 
     ActivityCompat.requestPermissions(getActivity(), PERMISSIONS_LOCATION, 
       LOCATION_PERMISSIONS_REQUEST); 
    } 
} 

// 위치가 켜져 있거나 꺼져있는 경우 그에 따라 축배가 표시됩니다.

@Override 
public void onRequestPermissionsResult(int requestCode, String[]  permissions, int[] grantResults) { 
    if (requestCode==LOCATION_PERMISSIONS_REQUEST){ 
     if (grantResults.length == 1 && 
       grantResults[0] == PackageManager.PERMISSION_GRANTED) { 
      Toast.makeText(getActivity(), "Location granted", Toast.LENGTH_SHORT).show(); 
     } else { 
      Toast.makeText(getActivity(), "Location permission denied", Toast.LENGTH_SHORT).show(); 
     } 
    }else { 
     super.onRequestPermissionsResult(requestCode, permissions, grantResults); 
    } 

} 

답변

0

음,이 권한을 요청하기 전에 권한이 부여되었는지 여부를 확인하고 권한을 요청해야하는지 확인해야합니다.

시도해보십시오. Library 이것은 사용자에게 권한을 요청하는 데 도움이됩니다. 자동으로 권한 이름 만 전달하면됩니다.

관련 문제