android mediaRecorder.setAudioSource失败了

use*_*196 67 android voice media-player gfx

我有android G1固件1.6,我试图用以下代码从应用程序录制语音.

MediaRecorder recorder = new MediaRecorder();
 recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
 recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
 recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
 recorder.setOutputFile(PATH_NAME);
 recorder.prepare();
 recorder.start();  

我的manifest.xml有:

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

我有:

09-23 14:41:05.531: ERROR/AndroidRuntime(1718): Uncaught handler: thread main exiting due to uncaught exception
09-23 14:41:05.551: ERROR/AndroidRuntime(1718): java.lang.RuntimeException: setAudioSource failed.
09-23 14:41:05.551: ERROR/AndroidRuntime(1718):     at android.media.MediaRecorder.setAudioSource(Native Method)

我该如何正确录制声音?

Seu*_*Ham 121

打开" AndroidManifest.xml" - >

<uses-permission android:name="android.permission.RECORD_AUDIO" />
Run Code Online (Sandbox Code Playgroud)

  • Geeze,我希望许可名称有一些统一性.`android.permission.RECORD_AUDIO`很棒,如果还有`android.permission.RECORD_VIDEO`,但是没有,那里有'android.permission.CAMERA`,这显然导致`android.permission.MICROPHONE`当然没有存在.诅咒. (4认同)
  • 如果你忘记了这一点,你可能也忘记了`<uses-permission android:name ="android.permission.WRITE_EXTERNAL_STORAGE"/>`来存储音频文件. (2认同)

Raf*_*ael 41

我知道这是一个非常古老的问题但是在Android Marshmallow中你必须继续"设置>应用程序>你的应用程序>权限"并获得麦克风权限.

  • 有关如何在运行时请求个人权限的信息:http://developer.android.com/training/permissions/requesting.html (9认同)

Bos*_*rge 12

如果您在Android M上运行,则需要在首次运行时请求记录音频的权限.要完成此操作,请询问用户是否可以在应用程序启动时录制音频:

private static final int MY_PERMISSIONS_REQUEST_READ_EXTERNAL_STORAGE = 29;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
    if (mContext.checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
        requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.RECORD_AUDIO},
                MY_PERMISSIONS_REQUEST_WRITE_EXTERNAL_STORAGE);
    } else {
        Log.d("Home", "Already granted access");
        initializeView(v);
    }
}

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String permissions[], @NonNull int[] grantResults) {
    switch (requestCode) {
        case MY_PERMISSIONS_REQUEST_WRITE_EXTERNAL_STORAGE: {
            if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                Log.d("Home", "Permission Granted");
                initializeView(v);
            } else {
                Log.d("Home", "Permission Failed");
                Toast.makeText(getActivity().getBaseContext(), "You must allow permission record audio to your mobile device.", Toast.LENGTH_SHORT).show();
                getActivity().finish();
            }
        }
        // Add additional cases for other permissions you may have asked for
    }
}
Run Code Online (Sandbox Code Playgroud)


uga*_*oft 6

对于 API 23+,检查 Manifest.xml<uses-permission android:name="android.permission.RECORD_AUDIO" />和 Java 代码中的音频记录权限

if (ActivityCompat.checkSelfPermission(cnt, Manifest.permission.RECORD_AUDIO)
            != PackageManager.PERMISSION_GRANTED) {
        ActivityCompat.requestPermissions(cnt, arrayOf(
                Manifest.permission.RECORD_AUDIO
        ),0)
        return
    }
Run Code Online (Sandbox Code Playgroud)


van*_*ery 1

这看起来是正确的。确保其他应用程序尚未使用 MIC。也许重新启动手机并重试。