1

アンドロイドMのREAD_PHONE_STATE権限を要求しようとしていますが、アクティビティで動作し、フラグメント化して実装するとダイアログボックスは表示されません。 ここにコードがあります。ここでフラグメントに表示されないAndroid M権限ダイアログ

if (preference.getToken() == null) { 
        if (ContextCompat.checkSelfPermission(getActivity(), Manifest.permission.READ_PHONE_STATE) != PackageManager.PERMISSION_GRANTED) { 
         requestReadPhoneStatePermission(); 
        } else { 
         TelephonyManager tm = (TelephonyManager) getActivity().getSystemService(Context.TELEPHONY_SERVICE); 
         HashMap<String, String> params = new HashMap<String, String>(); 
         params.put("appCode", Constants.TRACKING_ID); 
         params.put("phone", tm.getDeviceId()); 
         DeviceUserService.getDeviceUser(params, getContext()); 
         bookmark(); 
        } 

は方法requestReadPhoneStatePermission

public void requestReadPhoneStatePermission() { 
     if (ActivityCompat.shouldShowRequestPermissionRationale(getActivity(), Manifest.permission.READ_PHONE_STATE)) { 

     } else { 
      ActivityCompat.requestPermissions(getActivity(), new String[]{Manifest.permission.READ_PHONE_STATE}, READ_PHONE_STATE); 
     } 
    } 

であり、ここでonRequestPermissionsResult上のコードです。

@Override 
    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { 
     super.onRequestPermissionsResult(requestCode, permissions, grantResults); 
     switch (requestCode) { 
      case READ_PHONE_STATE: 
       if (grantResults.length > 0 
         && grantResults[0] == PackageManager.PERMISSION_GRANTED) { 
        Toast.makeText(getContext(), "granted", Toast.LENGTH_LONG).show(); 

       } else { 
        Toast.makeText(getContext(), "permission not granted", Toast.LENGTH_LONG).show(); 
       } 
       return; 
     } 
    } 

何が欠けていますか?前もって感謝します。

+0

こんにちは、私の助けになるようにここに答えを投稿できますか? –

答えて

1

requestReadPhoneStatePermissionメソッドが間違っています。

EDIT私はupvoted取得し、この古い記事を見て、それが正しい実装ではないことに気づきました。

これは、許可要求を処理する適切な方法です。

public void requestReadPhoneStatePermission() { 
    ActivityCompat.requestPermissions(getActivity(), new String[]{Manifest.permission.READ_PHONE_STATE}, READ_PHONE_STATE); 
} 



@Override 
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) { 
    super.onRequestPermissionsResult(requestCode, permissions, grantResults); 
    if(requestCode==READ_PHONE_STATE){ 
     if(grantResults[0]==PackageManager.PERMISSION_GRANTED){ 
      //do your thing 
     } 
     else{ 
      if(ActivityCompat.shouldShowRequestPermissionRationale(this,Manifest.permission.READ_PHONE_STATE)){ 
       //user denied the permission but did not check the "never show again" option. 
       //You can ask for the permission again or show a dialog explaining 
       //why you need the permission with a button that requests the permission again on click. 
      } 
      else{ 
       //user denied the permission and checked the "never show again" option. 
       //Here you can show a dialog explaining the situation and that the user has 
       //to go to the app settings and allow the permission otherwise yor feature 
       //will not be available. 
      } 
     } 
    } 

} 
関連する問題