3
votes

Comment résoudre le problème de son d'enregistrement dans l'API Android 26

J'ai une application dans laquelle j'enregistre du son. L'application fonctionne correctement dans Bit de code:

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)

Logcat:

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


0 commentaires

3 Réponses :


1
votes

Vous devrez peut-être définir l'autorisation dans le manifeste, si ce n'est déjà fait.

<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>

Cependant, ce problème indique qu'il n'y a pas d'enregistreur multimédia par défaut configuré sur le périphérique exécutant le plus récent Version de l'API.

Bien que vous ayez une application d'enregistrement par défaut sur l'appareil, elle peut ne pas être explicitement définie pour correspondre à cette intention spécifique.

Vous pouvez ajouter la vôtre via une nouvelle activité et ajouter une logique d'enregistrement. Pour spécifier cela, vous pouvez spécifier un filtre d'intention similaire à:

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


0 commentaires

1
votes

Il semble que sur certains appareils, il n'y ait pas d'application pour enregistrer le son. Vous devez vérifier s'il existe ou non une application d'enregistrement audio avant de la démarrer.

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();
}


1 commentaires

@ProgrammingofCricketer si aucune application d'enregistrement sonore n'est trouvée, vous devez installer une application sur cet appareil qui correspond à l'action android.provider.MediaStore.RECORD_SOUND . Sinon, vous ne pouvez rien faire dans ce cas.



1
votes

Vous pouvez essayer ce code:

 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;
}

par exemple de code https://github.com/manishtheandroider/VoiceRecorderApp


0 commentaires