2013-07-15 4 views
1

Я создал демо для медиаплеера в Android. Я столкнулся с проблемой, когда приступаю к запуску приложения. Когда мое приложение запускается, песня играет, но не воспроизводит полную песню, которую она только запускает, а сразу заканчивает означает, что она просто начинает активность и сразу же переходит в состояние resume(). И когда песня переполняется, я снова перезапускаю свою активность, песня не начинается с начала, она начинается с середины. Я сталкиваюсь с этой проблемой последние 1 неделю, и я не понимаю, как решить это. Пожалуйста, любой может помочь мне. Вот мой код. Спасибо в продвинутом виде.Как использовать медиаплеер в Android?

public class Audio_Activity extends Activity 
{ 
    private MediaPlayer mp = null; 
    PhoneStateListener phListener; 
    int length; 
    SharedPreferences prefs; 
    ImageView imgVw; 


    public void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 

     setContentView(R.layout.audio); 
     init(); 
     imgVw.setImageResource(R.raw.teddy_two); 

     prefs = PreferenceManager.getDefaultSharedPreferences(this); 
     final SharedPreferences. Editor prefsEdit = prefs.edit(); 

     mp=MediaPlayer.create(Audio_Activity.this,R.raw.issaq_tera_by_vishu); 
     Log.e("Song is playing","in Mediya Player "); 

     mp.start(); 
     mp.setLooping(false); 
     System.out.println("Media Plyer Is Start !!!"); 
     prefsEdit.putBoolean("mediaplaying", true); 
     prefsEdit.commit(); 
     btnChapter.setEnabled(false); 

     mp.setOnCompletionListener(new MediaPlayer.OnCompletionListener() 
     { 

      @Override 
      public void onCompletion(MediaPlayer mp) 
      { 
       // TODO Auto-generated method stub 
       mp.stop(); 
       System.out.println("Media Plyer Is Complete !!!"); 
       //mp.release(); 
       prefsEdit.putBoolean("mediaplaying", false); 
       prefsEdit.commit(); 
       btnChapter.setEnabled(true); 
       System.out.println("Music is over and Button is enable !!!!!!"); 
      } 
     }); 


     PhoneStateListener phoneStateListener = new PhoneStateListener() 
      { 
       @Override 
       public void onCallStateChanged(int state, String incomingNumber) 

       { 
        if (state == TelephonyManager.CALL_STATE_RINGING) 

        { 

         if(mp!=null) 

         { 
          setPlayerButton(true, false, true); 

          if(mp.isPlaying()) 
          { 

           mp.pause(); 

          } 
         } 

        } else if(state == TelephonyManager.CALL_STATE_IDLE) { 

        } else if(state == TelephonyManager.CALL_STATE_OFFHOOK) { 

        } 
        super.onCallStateChanged(state, incomingNumber); 
       } 
      }; 

      TelephonyManager mgr = (TelephonyManager) getSystemService(TELEPHONY_SERVICE); 

      if(mgr != null) 
      { 

       mgr.listen(phoneStateListener, PhoneStateListener.LISTEN_CALL_STATE); 
      } 


    } 


    private void setPlayerButton(Boolean play, Boolean pause, Boolean stop){ 
     btnStartStop.setEnabled(play); 
     if(play==true) 
      btnStartStop.setEnabled(true); 
     else 
      btnStartStop.setEnabled(false); 

    } 



    @Override 
     public void onConfigurationChanged(Configuration newConfig) 
    { 
      super.onConfigurationChanged(newConfig); 

      setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); 

     } 


    @Override 
    public void onPause() 
    { 
     super.onPause(); 

      SharedPreferences. Editor prefsEdit = prefs.edit(); 
      boolean isPlaying=prefs.getBoolean("mediaplaying",false); 
      if(isPlaying) 
      { 
       int position = mp.getCurrentPosition(); 
       Log.e("Current ","Position -> " + position); 
       prefsEdit.putInt("mediaPosition", position); 
       prefsEdit.commit(); 
      } 
    } 


    @Override 
     protected void onResume() 
     { 
      super.onResume(); 

      System.out.println("Activity is Resume !!!"); 

      boolean isPlaying=prefs.getBoolean("mediaplaying",false); 
      if(isPlaying) 
      { 
        int position = prefs.getInt("mediaPosition", 0); 
        mp.seekTo(position); 
        mp.start(); 

      } 

     } 



    @Override 
    public boolean onKeyDown(int keyCode, KeyEvent event) 
    { 
     super.onStop(); 

     if ((keyCode == KeyEvent.KEYCODE_BACK)) 
     { 
      if(mp!= null) 
      { 
       if(mp.isPlaying()) 
       { 
        mp.pause(); 
        System.out.println("Media Player is Pause/Stop click on Back button on Emulator!!!"); 

       } 
      } 
      finish(); 
      return true; 
     } 
     return super.onKeyDown(keyCode, event); 
    } 
} 

ответ

0

отправной с середины проблемы песни, потому что вы сохранить текущий прогресс песни в SharedPreferences, а затем при onResume() запуске игрока из прогрессировала позиции, хранящийся в SharedPreferences

0

Пожалуйста, попробуйте использовать сильфон код.

 void play() { 

     mediaPlayer = MediaPlayer.create(
      getApplicationContext(), R.raw.keytone); 
    try { 
     mediaPlayer.prepare(); 
    } catch (IllegalStateException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    mediaPlayer.start(); 

        } 
    private void pause() 

    { 

     mediaPlayer.release(); 

     }