illegalStateException dans android
J'ai pris de l'enregistrement sonore du code de
http://developer.android.com/guide/topics/media/index.html, après l'exécution de celui-ci sur mon émulateur c'est jeter l'exception illegalStateException, j'ai aussi essayé dans mon appareil, mais il y a aussi son même chose.
Je suis nouveau sur android, s'il vous plaît aider moi
package com.android.audiorecordtest;
import android.app.Activity;
import android.widget.LinearLayout;
import android.os.Bundle;
import android.os.Environment;
import android.view.ViewGroup;
import android.widget.Button;
import android.view.View;
import android.view.View.OnClickListener;
import android.content.Context;
import android.util.Log;
import android.media.MediaRecorder;
import android.media.MediaPlayer;
import java.io.IOException;
public class AudioRecordTest extends Activity
{
private static final String LOG_TAG = "AudioRecordTest";
private static String mFileName = null;
private RecordButton mRecordButton = null;
private MediaRecorder mRecorder = null;
private PlayButton mPlayButton = null;
private MediaPlayer mPlayer = null;
private void onRecord(boolean start) {
if (start) {
startRecording();
} else {
stopRecording();
}
}
private void onPlay(boolean start) {
if (start) {
startPlaying();
} else {
stopPlaying();
}
}
private void startPlaying() {
mPlayer = new MediaPlayer();
try {
mPlayer.setDataSource(mFileName);
mPlayer.prepare();
mPlayer.start();
} catch (IOException e) {
Log.e(LOG_TAG, "prepare() failed");
}
}
private void stopPlaying() {
mPlayer.release();
mPlayer = null;
}
private void startRecording() {
mRecorder = new MediaRecorder();
mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
mRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
mRecorder.setOutputFile(mFileName);
mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
try {
mRecorder.prepare();
} catch (IOException e) {
Log.e(LOG_TAG, "prepare() failed");
}
mRecorder.start();
}
private void stopRecording() {
mRecorder.stop();
mRecorder.release();
mRecorder = null;
}
class RecordButton extends Button {
boolean mStartRecording = true;
OnClickListener clicker = new OnClickListener() {
public void onClick(View v) {
onRecord(mStartRecording);
if (mStartRecording) {
setText("Stop recording");
} else {
setText("Start recording");
}
mStartRecording = !mStartRecording;
}
};
public RecordButton(Context ctx) {
super(ctx);
setText("Start recording");
setOnClickListener(clicker);
}
}
class PlayButton extends Button {
boolean mStartPlaying = true;
OnClickListener clicker = new OnClickListener() {
public void onClick(View v) {
onPlay(mStartPlaying);
if (mStartPlaying) {
setText("Stop playing");
} else {
setText("Start playing");
}
mStartPlaying = !mStartPlaying;
}
};
public PlayButton(Context ctx) {
super(ctx);
setText("Start playing");
setOnClickListener(clicker);
}
}
public AudioRecordTest() {
mFileName = Environment.getExternalStorageDirectory().getAbsolutePath();
mFileName += "/audiorecordtest.3gp";
}
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
LinearLayout ll = new LinearLayout(this);
mRecordButton = new RecordButton(this);
ll.addView(mRecordButton,
new LinearLayout.LayoutParams(
ViewGroup.LayoutParams.WRAP_CONTENT,
ViewGroup.LayoutParams.WRAP_CONTENT,
0));
mPlayButton = new PlayButton(this);
ll.addView(mPlayButton,
new LinearLayout.LayoutParams(
ViewGroup.LayoutParams.WRAP_CONTENT,
ViewGroup.LayoutParams.WRAP_CONTENT,
0));
setContentView(ll);
}
@Override
public void onPause() {
super.onPause();
if (mRecorder != null) {
mRecorder.release();
mRecorder = null;
}
if (mPlayer != null) {
mPlayer.release();
mPlayer = null;
}
}
}
Trace De La Pile:
> 06-01 11:06:18.440:
> ERROR/AndroidRuntime(724): Uncaught
> handler: thread main exiting due to
> uncaught exception 06-01 11:06:18.449:
> ERROR/AndroidRuntime(724):
> java.lang.IllegalStateException 06-01
> 11:06:18.449:
> ERROR/AndroidRuntime(724): at
> android.media.MediaRecorder.start(Native
> Method) 06-01 11:06:18.449:
> ERROR/AndroidRuntime(724): at
> com.example.android.whereareyou.Main.startRecording(Main.java:75)
> 06-01 11:06:18.449:
> ERROR/AndroidRuntime(724): at
> com.example.android.whereareyou.Main.onRecord(Main.java:32)
> 06-01 11:06:18.449:
> ERROR/AndroidRuntime(724): at
> com.example.android.whereareyou.Main.access$0(Main.java:30)
> 06-01 11:06:18.449:
> ERROR/AndroidRuntime(724): at
> com.example.android.whereareyou.Main$RecordButton$1.onClick(Main.java:89)
> 06-01 11:06:18.449:
> ERROR/AndroidRuntime(724): at
> android.view.View.performClick(View.java:2179)
> 06-01 11:06:18.449:
> ERROR/AndroidRuntime(724): at
> android.view.View.onTouchEvent(View.java:3828)
> 06-01 11:06:18.449:
> ERROR/AndroidRuntime(724): at
> android.widget.TextView.onTouchEvent(TextView.java:6291)
> 06-01 11:06:18.449:
> ERROR/AndroidRuntime(724): at
> android.view.View.dispatchTouchEvent(View.java:3368)
> 06-01 11:06:18.449:
> ERROR/AndroidRuntime(724): at
> android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:863)
> 06-01 11:06:18.449:
> ERROR/AndroidRuntime(724): at
> android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:863)
> 06-01 11:06:18.449:
> ERROR/AndroidRuntime(724): at
> android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:863)
> 06-01 11:06:18.449:
> ERROR/AndroidRuntime(724): at
> android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:863)
> 06-01 11:06:18.449:
> ERROR/AndroidRuntime(724): at
> com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1707)
> 06-01 11:06:18.449:
> ERROR/AndroidRuntime(724): at
> com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1197)
> 06-01 11:06:18.449:
> ERROR/AndroidRuntime(724): at
> android.app.Activity.dispatchTouchEvent(Activity.java:1993)
> 06-01 11:06:18.449:
> ERROR/AndroidRuntime(724): at
> com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1691)
> 06-01 11:06:18.449:
> ERROR/AndroidRuntime(724): at
> android.view.ViewRoot.handleMessage(ViewRoot.java:1525)
> 06-01 11:06:18.449:
> ERROR/AndroidRuntime(724): at
> android.os.Handler.dispatchMessage(Handler.java:99)
> 06-01 11:06:18.449:
> ERROR/AndroidRuntime(724): at
> android.os.Looper.loop(Looper.java:123)
> 06-01 11:06:18.449:
> ERROR/AndroidRuntime(724): at
> android.app.ActivityThread.main(ActivityThread.java:3948)
> 06-01 11:06:18.449:
> ERROR/AndroidRuntime(724): at
> java.lang.reflect.Method.invokeNative(Native
> Method) 06-01 11:06:18.449:
> ERROR/AndroidRuntime(724): at
> java.lang.reflect.Method.invoke(Method.java:521)
> 06-01 11:06:18.449:
> ERROR/AndroidRuntime(724): at
> com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:782)
> 06-01 11:06:18.449:
> ERROR/AndroidRuntime(724): at
> com.android.internal.os.ZygoteInit.main(ZygoteInit.java:540)
> 06-01 11:06:18.449:
> ERROR/AndroidRuntime(724): at
> dalvik.system.NativeStart.main(Native
> Method)
veuillez envoyer la stacktrace de votre exception de logcat
si l'enregistrement se passe ou pas... en Êtes-vous des ANR Dialogue...
Pourriez-vous svp poster votre fichier de Manifeste, je vous remercie.
si l'enregistrement se passe ou pas... en Êtes-vous des ANR Dialogue...
Pourriez-vous svp poster votre fichier de Manifeste, je vous remercie.
OriginalL'auteur SKoganti | 2011-06-01
Vous devez vous connecter pour publier un commentaire.
Essayer de l'utiliser:-
}
Cela fonctionne très bien. et le fichier sera stocké sur la carte SD. vous pouvez également jouer en utilisant la méthode de lecture que vous avez utilisé dans votre code.
OriginalL'auteur Balban
Le problème dans le code fourni n'est que le nom du nom de fichier lorsque vous enregistrez (mFileName) est nulle.
Vous pouvez les appeler
AudioRecordTest()
avant d'appelermRecorder.setOutputFile(mFileName)
surstartRecording()
méthode. Cela devrait fonctionner. Au moins il a fait pour moi.OriginalL'auteur Julian