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 ?