Я создал активность, которая получает сообщения в реальном времени. Иногда сообщение является просто уведомлением, а другое сообщение вызывает диалог «Да/Нет». Я хотел создать 10-секундное звуковое уведомление для этого, поэтому я объявил в классе. Я сделал mediaplayer глобальным, чтобы не создавать его каждый раз, когда мне нужно играть в звук.Android mediaplayer не работает
final MediaPlayer mediaPlayer = new MediaPlayer();
final Handler handler = new Handler();
Я установил источник данных в деятельности OnCreate
try {
mediaPlayer.setDataSource(getBaseContext(), defaultRingtoneUri);
mediaPlayer.setAudioStreamType(AudioManager.STREAM_RING);
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (SecurityException e) {
e.printStackTrace();
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
Тогда в том, когда я получаю сообщение, что я делаю в onnewintent
try {
mediaPlayer.prepare();
mediaPlayer.start();
handler.postDelayed(new Runnable() {
@Override
public void run() {
if (mediaPlayer.isPlaying())
{
mediaPlayer.stop();
}
}
}, 10000);
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (SecurityException e) {
e.printStackTrace();
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
Наконец, чтобы остановить звуковой сигнал при alertdialog щелчке я сделал
DialogInterface.OnClickListener dialogClickListener = new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
switch (which){
case DialogInterface.BUTTON_POSITIVE:
//Yes button clicked
response = "1";
Log.v("Yes button clicked", response);
//some code
if(mediaPlayer.isPlaying())
mediaPlayer.stop();
break;
case DialogInterface.BUTTON_NEGATIVE:
//No button clicked
response = "-1";
Log.v("No button clicked", response);
//some code
if(mediaPlayer.isPlaying())
mediaPlayer.stop();
break;
}
}
};
Я тестировал это до года. на xperia p с ожидаемым поведением все время. Никаких проблем. Сегодня у меня появился новый лабиринт (у него меньше ROM 512M). При первом сообщении он воспроизводит звук, но потом я получаю сообщение об ошибке IOexception при подготовке с status=0xFFFFFF8E
Любые идеи о том, что я делаю неправильно здесь? Я буду открыт для изменения реализации, если для этой цели существует более чистый способ.
01-01 09:53:54.813: D/YourActivity(15988): onNewIntent is called!
01-01 09:53:54.816: W/System.err(15988): java.io.IOException: Prepare failed.: status=0xFFFFFF8E
01-01 09:53:54.818: W/System.err(15988): at android.media.MediaPlayer.prepare(Native Method)
01-01 09:53:54.822: W/System.err(15988): at com.example.delmole.OrderActivity.onNewIntent(OrderActivity.java:309)
01-01 09:53:54.822: W/System.err(15988): at android.app.Instrumentation.callActivityOnNewIntent(Instrumentation.java:1156)
01-01 09:53:54.823: W/System.err(15988): at android.app.ActivityThread.deliverNewIntents(ActivityThread.java:2464)
01-01 09:53:54.823: W/System.err(15988): at android.app.ActivityThread.performNewIntents(ActivityThread.java:2477)
01-01 09:53:54.823: W/System.err(15988): at android.app.ActivityThread.handleNewIntent(ActivityThread.java:2486)
01-01 09:53:54.823: W/System.err(15988): at android.app.ActivityThread.access$1400(ActivityThread.java:162)
01-01 09:53:54.824: W/System.err(15988): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1435)
01-01 09:53:54.824: W/System.err(15988): at android.os.Handler.dispatchMessage(Handler.java:107)
01-01 09:53:54.824: W/System.err(15988): at android.os.Looper.loop(Looper.java:194)
01-01 09:53:54.824: W/System.err(15988): at android.app.ActivityThread.main(ActivityThread.java:5371)
01-01 09:53:54.825: W/System.err(15988): at java.lang.reflect.Method.invokeNative(Native Method)
01-01 09:53:54.825: W/System.err(15988): at java.lang.reflect.Method.invoke(Method.java:525)
01-01 09:53:54.826: W/System.err(15988): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:833)
01-01 09:53:54.826: W/System.err(15988): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600)
01-01 09:53:54.827: W/System.err(15988): at dalvik.system.NativeStart.main(Native Method)
Пожалуйста, пометьте полную ошибку в LogCat –
что такое OrderActivity? Можете ли вы рассказать нам, что там в строке 309? – Opiatefuchs
строка 309 - mediaPlayer.prepare(); Я уже дал код выше для этого в блоке try –