繁体   English   中英

Android 权限不起作用

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM