1. ホーム

[解決済み】Android Mのパーミッション:onRequestPermissionsResult()が呼び出されない件

2022-03-28 14:33:42

質問

新しい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);
                }
            }
        }
    }
}

どなたか同じような問題に遭遇した方はいらっしゃいますか? この件に関するヘルプをお願いします。 ありがとうございます。

解決方法は?

この問題は、実はNestedFragmentsが原因でした。 基本的に、ほとんどのフラグメントはHostedFragmentを拡張し、さらにCompatFragmentを拡張しています。このネストしたフラグメントが問題を引き起こしていたのですが、最終的にはプロジェクトの別の開発者が解決してくれました。

彼は、ビットスイッチのような低レベルのことをやってこれを動作させていたので、実際の最終的な解決策はあまりわかりません