如何解决Android API 26中的录制声音问题

时间:2019-03-02 05:58:41

标签: android audio

我有一个应用在其中录制声音。应用在<= Api 25中正常运行,但在26或更高版本中无法正常运行。

代码位:

      startActivityForResult(new Intent("android.provider.MediaStore.RECORD_SOUND"), REQUEST_CODE_RECORD);

Logcat:

W/System.err: android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.provider.MediaStore.RECORD_SOUND }
W/System.err:     at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1944)
        at android.app.Instrumentation.execStartActivity(Instrumentation.java:1618)
        at android.app.Activity.startActivityForResult(Activity.java:4501)
        at android.app.Activity.startActivityForResult(Activity.java:4459)
        at com.clogica.mp3cutter.activity.RingtoneEditActivity.onCreate(RingtoneEditActivity.java:267)
        at android.app.Activity.performCreate(Activity.java:7013)
        at android.app.Activity.performCreate(Activity.java:7004)
W/System.err:     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1215)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2734)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2859)
        at android.app.ActivityThread.-wrap11(Unknown Source:0)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1592)
        at android.os.Handler.dispatchMessage(Handler.java:106)
        at android.os.Looper.loop(Looper.java:164)
        at android.app.ActivityThread.main(ActivityThread.java:6518)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)

3 个答案:

答案 0 :(得分:0)

您可能必须在清单中定义权限(如果尚未完成的话)。

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

但是,此问题表明在运行更高版本API的设备上未设置默认媒体记录器。

虽然设备上可能有一个默认的记录器应用程序,但可能未明确定义它以映射到该特定意图。

您可以通过新活动添加自己的内容并添加录音逻辑。 要指定此内容,您可以指定类似于以下内容的意图过滤器:

<activity
    android:name="my.audio.RecorderActivity"
    android:label="@string/recorder_activity" >
    <intent-filter>
        <action android:name="android.provider.MediaStore.RECORD_SOUND" />
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
</activity>

答案 1 :(得分:0)

在某些设备上似乎没有录制声音的应用程序。启动之前,应检查是否有录音应用程序。

Intent intent = new Intent(MediaStore.Audio.Media.RECORD_SOUND_ACTION);

if (intent.resolveActivity(getPackageManager()) != null) {
    startActivityForResult(intent, REQUEST_CODE_RECORD);
} else {
    Toast.makeText(this, "No sound record application found", Toast.LENGTH_SHORT).show();
}

答案 2 :(得分:0)

您可以尝试以下代码:

 private void startRecording() {
    recorder = new MediaRecorder();
    recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
    recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
    recorder.setOutputFile(fileName);
    recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);

    try {
        recorder.prepare();
    } catch (IOException e) {
        Log.e(LOG_TAG, "prepare() failed");
    }

    recorder.start();
}

private void stopRecording() {
    recorder.stop();
    recorder.release();
    recorder = null;
}

例如代码  https://github.com/manishtheandroider/VoiceRecorderApp