java - 权限对话框未显示 - 简单权限
问题描述
我正在开发一个应该具有“RECORD_AUDIO”权限的应用程序,但在实现以下代码后,对话框没有显示。每当我手动进入设备上的应用程序设置以打开权限时,它都可以正常工作。
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();
}
}
这是清单的相关部分:
<uses-sdk
android:minSdkVersion="15"
android:targetSdkVersion="26" />
<uses-permission android:name="android.permission.RECORD_AUDIO"/>
我在这里缺少一些简单的东西吗?
解决方案
我发现了问题所在:
AudioDispatcher dispatcher = AudioDispatcherFactory.fromDefaultMicrophone(22050,1024,0);
需要在请求权限之后调用,而不是之前。
推荐阅读
- javascript - 在渲染方法中显示动态数据
- google-bigquery - 是否仍然可以从 BigQuery 表中删除 Partition filter=Required 设置?
- kubernetes - Openshift:无法针对任何安全性 > 上下文约束进行验证
- jenkins-plugins - 使用groovy配置jenkins kubernetes插件的pod保留值
- node.js - 使用 Joi 和 Node,需要 2 个字段中的 1 个,但不允许两者都存在
- python - 为什么 Python 代码在终端中运行时不能在 Jupyter 笔记本中运行?
- python - Cloud Build 环境变量未传递给 GAE 上的 Django 应用
- python - __getattr__ 和 __setattr__ 在这段代码中的作用是什么?
- aws-lambda - CloudWatch 事件规则:自行禁用
- r - 更新 RSQLite 使用的 SQLite 版本