2013-08-09 3 views
0

실시간으로 메시지를받는 활동을 만들었습니다. 때로는 메시지가 알림 일 뿐이며, 메시지가 예/아니요 경고 대화 상자 팝업으로 이어지기도합니다. 클래스에 선언 할 수 있도록 10 초 사운드 알림을 만들고 싶습니다. 나는 사운드를 재생해야 할 때마다 미디어 플레이어를 만들지 않기 위해 글로벌 미디어 플레이어를 만들었습니다.Android mediaplayer가 작동하지 않습니다.

final MediaPlayer mediaPlayer = new MediaPlayer(); 
final Handler handler = new Handler(); 

나는 활동에 데이터 소스를 설정 한 OnCreate

난에 AlertDialog는 내가 수행 한 클릭 경고음을 중지 마지막

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(); 
    } 
에서 할 메시지를받을 때의 그런
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(); 
    } 

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을 가지고있다)를 얻었다. 첫 번째 메시지에서 소리를 재생하지만 나중에 IO 예외 오류가 발생합니다. 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) 
+0

LogCat –

+0

에 전체 오류를 입력하십시오. OrderActivity는 무엇입니까? 309 호선에 무엇이 있는지 알려줄 수 있습니까? – Opiatefuchs

+0

라인 309는 mediaPlayer.prepare()입니다. 위의 코드를 이미 try 블록에서 제공했습니다. –

답변

0

- mediaPlayer.prepare(); 알림 사운드를 처음 재생할 때 mediaplayer 객체가 이미 준비되어 있기 때문에 오류가 발생합니다.

이 문을 onCreate 메서드에 배치하여이 문이 onnewintent가 호출 될 때마다 한 번만 실행되도록하십시오.

다른 가능한 해결책이 -

기록 mediaPlayer.reset(); before mediaPlayer.prepare(); onnewentent 메서드

미디어 플레이어 개체의 상태가 유휴 상태로 변경되며 준비 문에 문제가 없습니다.

+0

가 추가되어 oncreate에서 준비하십시오. 이제 메시지를 받으면 .start 및 .stop 호출 만 있습니다. 하지만 이제는 나에게 스테이트 0에서 호출 된 erro 말하는 시작을 제공합니다. 오류 (-38,0) –

+0

사용 mediaPlayer.prepareAsync(); 대신 mediaPlayer.prepare(); –

+0

이 작동하지 않습니다. 멈추지 않고 지금 멈추고 시작합니다. 그것은 현재로 작동하는 것 같습니다. –

관련 문제