Java 权限对话框未显示-轻松权限

Java 权限对话框未显示-轻松权限,java,android,permissions,Java,Android,Permissions,我正在开发一个应该具有“录制音频”权限的应用程序,但是在实现了以下代码之后,对话框没有显示。每当我手动进入设备上的应用程序设置以打开权限时,它都可以正常工作 public class MainActivity extends AppCompatActivity implements EasyPermissions.PermissionCallbacks { AudioDispatcher dispatcher = AudioDispatcherFactory.fromDefaultMicro

我正在开发一个应该具有“录制音频”权限的应用程序,但是在实现了以下代码之后,对话框没有显示。每当我手动进入设备上的应用程序设置以打开权限时,它都可以正常工作

public class MainActivity extends AppCompatActivity implements  EasyPermissions.PermissionCallbacks {

AudioDispatcher dispatcher = AudioDispatcherFactory.fromDefaultMicrophone(22050,1024,0);

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    String[] perms = {Manifest.permission.RECORD_AUDIO};
    if (EasyPermissions.hasPermissions(this, perms)) {
        initiateAudio();
        // Already have permission, do the thing
        // ...
    } else {
        // Do not have permissions, request them now
        EasyPermissions.requestPermissions(this, "REQUEST_AUDIO",
                1, perms);
    }



}


private void initiateAudio(){

    PitchDetectionHandler pdh = new PitchDetectionHandler() {
        @Override
        public void handlePitch(PitchDetectionResult result, AudioEvent e) {
            final float pitchInHz = result.getPitch();
            runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    TextView text = (TextView) findViewById(R.id.textView);
                    text.setText("" + pitchInHz);
                }
            });
        }
    };

    AudioProcessor p = new PitchProcessor(PitchProcessor.PitchEstimationAlgorithm.FFT_YIN, 22050, 1024, pdh);
    dispatcher.addAudioProcessor(p);
    new Thread(dispatcher,"Audio Dispatcher").start();

}

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

}

@Override
public void onPermissionsGranted(int requestCode, List<String> list) {
    initiateAudio();
}

@Override
public void onPermissionsDenied(int requestCode, List<String> list) {
    Toast.makeText(this, "Audio Permission not granted", Toast.LENGTH_LONG).show();
}
}
公共类MainActivity扩展AppCompativeActivity实现EasyPermissions.PermissionCallbacks{
AudioDispatcher=AudioDispatcherFactory.fromDefaultMirror(220501024,0);
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
字符串[]perms={Manifest.permission.RECORD_AUDIO};
if(EasyPermissions.hasPermissions(this,perms)){
发起人();
//已经有许可了,做这件事吧
// ...
}否则{
//没有权限,请立即请求
EasyPermissions.requestPermissions(这是“请求音频”,
1、烫发;
}
}
私有无效初始值(){
PitchDetectionHandler pdh=新PitchDetectionHandler(){
@凌驾
公共无效handlePitch(PitchDetectionResult结果,AudioEvent e){
最终浮动螺距inhz=结果。getPitch();
runOnUiThread(新的Runnable(){
@凌驾
公开募捐{
TextView text=(TextView)findViewById(R.id.TextView);
text.setText(“+pitchInHz”);
}
});
}
};
音频处理器p=新的PitchProcessor(PitchProcessor.PitchstimationAlgorithm.FFT_-YIN,220501024,pdh);
dispatcher.addAudioProcessor(p);
新线程(调度程序,“音频调度程序”).start();
}
@凌驾
公共无效onRequestPermissionsResult(int requestCode,
字符串权限[],int[]grantResults){
super.onRequestPermissionsResult(请求代码、权限、授权结果);
EasyPermissions.onRequestPermissionsResult(请求代码、权限、grantResults、此);
}
@凌驾
公共无效onPermissionsGranted(int请求代码,列表){
发起人();
}
@凌驾
public void onPermissionsDeed(int requestCode,List){
Toast.makeText(此“未授予音频权限”,Toast.LENGTH_LONG.show();
}
}
以下是舱单的相关部分:

 <uses-sdk
    android:minSdkVersion="15"
    android:targetSdkVersion="26" />
<uses-permission android:name="android.permission.RECORD_AUDIO"/>


这里有没有我遗漏的简单内容?

我发现了问题所在:

AudioDispatcher dispatcher = AudioDispatcherFactory.fromDefaultMicrophone(22050,1024,0);

需要在请求权限之后而不是之前调用。

是否已检查EasyPermissions.requestPermissions(此“请求音频”,1,perms);电话线是否真的接通了?