5 votes

MediaRecord n'a pas réussi à démarrer l'émulateur Android 7.1.1

En bref, je n'arrive pas à faire fonctionner MediaRecorder#record sur l'émulateur Android 7.1.1 et je ne comprends pas pourquoi. Voici les détails supplémentaires :

Environnement : Système d'exploitation : Mac OS X El Capitan version 10.11.6

IDE : AndroidStudio version 2.2.3

Un problème : J'ai écrit un exemple d'application pour démontrer le problème. Cette application consiste en un bouton avec un OnClickListener qui va initialiser et configurer l'instance MediaRecorder, préparer et lancer l'enregistrement. Après avoir activé la permission RECORD_AUDIO dans les paramètres, le code ci-dessous fonctionne correctement sur l'émulateur Android 7.0 API 24 (x86_64 Graphics : Hardware) téléchargé par et utilisé par le gestionnaire AVD, mais produit l'erreur suivante sur l'émulateur Android 7.1.1 API 25 (avec les API de Google) (x86_64 Graphics : Hardware) :

Erreur uniquement sur Android 7.1.1 API 25 java.lang.RuntimeException : le démarrage a échoué. at Android.media.MediaRecorder.start(Méthode native)

Question Quelqu'un sait-il quel est le problème ? Y a-t-il un problème avec ma configuration qui ne prend pas en charge Android 7.1.1 ? Ce problème a été reproduit sur 2 Macs jusqu'à présent.

Code :

MainActivity.java :

package com.abstractx1.testrecord;

import android.media.MediaRecorder;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Button recordButton = (Button) findViewById(R.id.recordButton);

        recordButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                String path = getFilesDir().getAbsolutePath() + "/" + "AudioRecording.3gp";

                MediaRecorder mediaRecorder = new MediaRecorder();
                mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
                mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
                mediaRecorder.setAudioEncoder(MediaRecorder.OutputFormat.AMR_NB);
                mediaRecorder.setOutputFile(path);

                try {
                    mediaRecorder.prepare();
                    mediaRecorder.start();
                } catch (Exception e) {
                    Log.e("DEBUG-MainActivity", "Error", e);
                    Log.e("DEBUG-MainActivity",     Log.getStackTraceString(e));
                }

                Toast.makeText(MainActivity.this, "Recording started", Toast.LENGTH_LONG).show();
            }
        });
    }
}

activité_main.xml :

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.abstractx1.testrecord.MainActivity">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello World!" />

    <Button
        android:text="Record"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerVertical="true"
        android:layout_centerHorizontal="true"
        android:id="@+id/recordButton" />
</RelativeLayout>

AndroidMainfest.xml :

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.abstractx1.testrecord">

    <uses-feature
        android:name="android.hardware.microphone"
        android:required="false" />

    <uses-permission android:name="android.permission.RECORD_AUDIO" />
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

Merci, et je m'excuse par avance si la réponse à cette question a déjà été donnée ailleurs. J'ai cherché pendant plusieurs jours sans succès. Aussi, s'il y a une ambiguïté/un manque d'information, je développerai et répondrai aux questions.

C'est une chose tellement basique que je pense qu'il doit s'agir d'un problème avec l'émulateur.

Quelqu'un peut-il m'aider ?

1voto

Hod Points 1652

MediaRecorder n'est pas actuellement supporté sur l'émulateur. Ceci est explicitement indiqué à la fin du paragraphe d'introduction de la documentation. Voir la documentation sur Android MediaRecorder .

1voto

Al-Kathiri Khalid Points 96

J'ai rencontré un problème similaire en raison de la non-utilisation de l'environnement, de sorte que le lecteur multimédia ne peut pas trouver le chemin à utiliser pour stocker l'audio, ce qui explique qu'il fonctionne sur certains appareils et pas sur d'autres : https://github.com/alkathirikhalid/Android-uni-foundation

J'ai également examiné votre code et j'ai détecté d'éventuelles erreurs ou au moins des recommandations.

  • Emplacement du fichier / chemin, vous devez utiliser Environment.getExternalStorageDirectory().getAbsolutePath()... Laissez le système d'exploitation vous donner l'emplacement car les différents périphériques ont des conventions de nommage différentes.
  • Uses feature required is false, alors vous devriez vérifier si les appareils ont un micro ou non avant d'appeler le lecteur multimédia.
  • Uses Permission Write External Storage Vous avez l'intention de stocker l'audio enregistré pour le conserver et peut-être l'utiliser / le lire plus tard.
  • Enfin, l'émulateur n'est pas pris en charge comme décrit dans la documentation Android "Note : Actuellement, Media Recorder ne fonctionne pas sur l'émulateur". https://developer.Android.com/reference/Android/media/MediaRecorder.html

Il est fortement recommandé d'utiliser des appareils réels lorsqu'il s'agit de multimédia, de lieux et d'autres périphériques d'appareils tels que des capteurs.

Salud.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X