Java 每次拒绝时,运行时权限都会返回

Java 每次拒绝时,运行时权限都会返回,java,android,android-permissions,android-audiorecord,Java,Android,Android Permissions,Android Audiorecord,我对录音许可有异议 简而言之:-音频录制权限返回值始终为false 当用户启动应用程序时(第一次),它会显示权限请求 消息对话框 如果用户接受,则拒绝,一切正常。 下次当用户打开应用程序时,我检查是否授予了权限,它返回“权限被拒绝”,我再次请求权限。 每次启动麦克风录音时。它返回权限被拒绝,我必须再次请求权限。所以每次我启动麦克风,它都会返回拒绝许可。 我的问题是,应用程序应该在后台工作,并从一个小部件开始录制,但启动权限请求会将活动带到前面 int permissionResult = Per

我对录音许可有异议

简而言之:-音频录制权限返回值始终为false

当用户启动应用程序时(第一次),它会显示权限请求 消息对话框 如果用户接受,则拒绝,一切正常。 下次当用户打开应用程序时,我检查是否授予了权限,它返回“权限被拒绝”,我再次请求权限。 每次启动麦克风录音时。它返回权限被拒绝,我必须再次请求权限。所以每次我启动麦克风,它都会返回拒绝许可。 我的问题是,应用程序应该在后台工作,并从一个小部件开始录制,但启动权限请求会将活动带到前面

int permissionResult = PermissionChecker.checkSelfPermission(getApplicationContext(), Manifest.permission.RECORD_AUDIO);
    // Start listening to voices
    if (permissionResult == PermissionChecker.PERMISSION_DENIED || permissionResult == PermissionChecker.PERMISSION_DENIED_APP_OP) {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            requestPermissions( new String[]{Manifest.permission.RECORD_AUDIO}, REQUEST_RECORD_AUDIO_PERMISSION);
        }
    } else if (ActivityCompat.shouldShowRequestPermissionRationale(this,
            Manifest.permission.RECORD_AUDIO)) {
        showPermissionMessageDialog();
    } else if (permissionResult == PermissionChecker.PERMISSION_GRANTED) {
     //granted.
    }


 private void showPermissionMessageDialog() {
    MessageDialogFragment
            .newInstance(getString(R.string.permission_message))
            .show(getSupportFragmentManager(), FRAGMENT_MESSAGE_DIALOG);
}
MessageDialogFragment

/**
 * A simple dialog with a message.
 *
 *  <p>The calling {@link android.app.Activity} needs to implement {@link
 * MessageDialogFragment.Listener}.</p>
 */
   public class MessageDialogFragment extends AppCompatDialogFragment {

public interface Listener {
    /**
     * Called when the dialog is dismissed.
     */
    void onMessageDialogDismissed();
}

private static final String ARG_MESSAGE = "message";

/**
 * Creates a new instance of {@link MessageDialogFragment}.
 *
 * @param message The message to be shown on the dialog.
 * @return A newly created dialog fragment.
 */
public static MessageDialogFragment newInstance(String message) {
    final MessageDialogFragment fragment = new MessageDialogFragment();
    final Bundle args = new Bundle();
    args.putString(ARG_MESSAGE, message);
    fragment.setArguments(args);
    return fragment;
}

@NonNull
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
    return new AlertDialog.Builder(getContext())
            .setMessage(getArguments().getString(ARG_MESSAGE))
            .setPositiveButton(android.R.string.ok, (dialog, which) -> ((Listener) getActivity()).onMessageDialogDismissed())
            .setOnDismissListener(dialogInterface -> ((Listener) getActivity()).onMessageDialogDismissed())
            .create();
}

}  
/**
*带有消息的简单对话框。
*
*调用{@link android.app.Activity}需要实现{@link
*MessageDialogFragment.Listener}

*/ 公共类MessageDialogFragment扩展了AppCompatDialogFragment{ 公共接口侦听器{ /** *当对话框被取消时调用。 */ void onMessageDialogDisposed(); } 私有静态最终字符串ARG_MESSAGE=“MESSAGE”; /** *创建{@link MessageDialogFragment}的新实例。 * *@param message要在对话框上显示的消息。 *@返回一个新创建的对话框片段。 */ publicstaticmessagedialogfragmentnewinstance(字符串消息){ final MessageDialogFragment fragment=新MessageDialogFragment(); 最终Bundle args=新Bundle(); args.putString(ARG_消息,消息); fragment.setArguments(args); 返回片段; } @非空 @凌驾 创建对话框上的公共对话框(Bundle savedInstanceState){ 返回新的AlertDialog.Builder(getContext()) .setMessage(getArguments().getString(ARG_消息)) .setPositiveButton(android.R.string.ok,(dialog,which)->((侦听器)getActivity()).onMessageDialogDisposed()) .setOnDismissListener(dialogInterface->((Listener)getActivity()).OnMessageDialogDisposed()) .create(); } }
显示

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="....">

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />


showPermissionMessageDialog()看起来像什么?@LarrySchiefer更新了帖子,还得到了一个带有库的解决方案。如果我能知道为什么我的方法不起作用,这样我就能了解我的错误,那就更好了。很难说没有看到更多的代码以及
PermissionChecker
在做什么。如果您有兴趣使用一个库来简化此过程,请查看andele: