Android M 権限: onRequestPermissionsResult() が呼び出されない 質問する

Android M 権限: onRequestPermissionsResult() が呼び出されない 質問する

新しい M ランタイム権限システムを使用するようにアプリを更新しています。onRequestPermissionsResult() 以外はすべて機能しています。ボタンが押されたときに権限をチェックし、成功した場合はテキスト メッセージを送信する必要があります。権限を付与するとダイアログが閉じますが、ボタンをもう一度押すまでテキストの送信はトリガーされません。

onRequestPermissionsResult() メソッドをデバッグしてブレークポイントを設定しましたが、ブレークポイントが実行されません。

このメソッドが最初に呼び出されます:

    private void askForPermission() {
    String[] permissions = new String[]{Manifest.permission.SEND_SMS};
    ActivityCompat.requestPermissions(getActivity(), permissions, PERMISSIONS_CODE);
}

そして、コールバックは次のようになります。

    @Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);

    if (requestCode == PERMISSIONS_CODE) {
        for (int i = 0; i < permissions.length; i++) {
            String permission = permissions[i];
            int grantResult = grantResults[i];

            if (permission.equals(Manifest.permission.SEND_SMS)) {
                if (grantResult == PackageManager.PERMISSION_GRANTED) {
                    onPPSButtonPress();
                } else {
                    requestPermissions(new String[]{Manifest.permission.SEND_SMS}, PERMISSIONS_CODE);
                }
            }
        }
    }
}

同様の問題に遭遇した人はいますか?これについて助けていただければ幸いです。ありがとうございます

ベストアンサー1

私も同じ問題に遭遇しましたが、解決策を見つけました。サポート ライブラリを使用する場合は、正しいメソッド呼び出しを使用する必要があります。例:

  • AppCompatActivityの場合は、ActivityCompat.requestPermissionsを使用する必要があります。
  • android.support.v4.app.Fragmentの場合は、単にrequestPermissionsを使用する必要があります(これは android.support.v4.app.Fragment のインスタンス メソッドです)

フラグメントで ActivityCompat.requestPermissions を呼び出すと、フラグメントではなくアクティビティでonRequestPermissionsResultコールバックが呼び出されます。

おすすめ記事