[英]Android Permissions won't work
我正在尝试在 android 中用 java 录制声音,但该应用程序因以下异常而崩溃:
E/AndroidRuntime:致命异常:Timer-0 进程:com.example.mathieu.telefony1,PID:31353 java.lang.RuntimeException:setAudioSource 失败。
但是很奇怪,因为我在AndroidManifest.xml里加了
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.RECORD_AUDIO"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<application...
这是我录制声音的代码:
MediaRecorder mr = new MediaRecorder();
File file = new File(OUTPUT_FILE);
try {
mr.setOutputFile(OUTPUT_FILE);
mr.setAudioSource(MediaRecorder.AudioSource.MIC);
mr.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT);
mr.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);
mr.prepare();
mr.start();
Thread.sleep(1000);
mr.stop();
} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
在 API 级别 23 以上,您将获得务实的许可,例如:
private static final int PERMISSION_REQUEST_CODE = 1;
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M) {
if (checkSelfPermission(Manifest.permission.SEND_SMS)
== PackageManager.PERMISSION_DENIED) {
Log.d("permission", "permission denied to SEND_SMS - requesting it");
String[] permissions = {Manifest.permission.SEND_SMS};
requestPermissions(permissions, PERMISSION_REQUEST_CODE);
}
}
检查运行时权限
对于比 Android L 更高操作系统的设备,一些额外的功能可用于安全目的。 您必须在运行时再次检查一些有风险的权限,如果它们不是由用户提供的,那么您必须要求授予它。
有关在运行时请求权限的更多信息
官方来自 Android 文档:
注意:在使用 setDataSource() 时,您必须捕获或传递 IllegalArgumentException 和 IOException,因为您引用的文件可能不存在
确保音频文件存在并且声明了运行时权限(对于 Api 23+)和清单权限。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.