Как решить проблему записи звука в Android API 26 - PullRequest
0 голосов
/ 02 марта 2019

У меня есть одно приложение, в котором я записываю звук.Приложение работает нормально в <= Api 25, но не в 26 или выше.</p>

Бит кода:

      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 голосов
/ 02 марта 2019

Похоже, на некоторых устройствах нет приложения для записи звука.Вы должны проверить, есть ли приложение для записи звука или нет, прежде чем запускать его.

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();
}
0 голосов
/ 02 марта 2019

Вы можете попробовать этот код:

 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

0 голосов
/ 02 марта 2019

Возможно, вам придется определить разрешение в манифесте, если это еще не сделано.

<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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...