2014-02-24 60 views
5

我知道這個問題有很多問題,但他們都沒有幫助我。我嘗試了所有但沒有,仍然在我的logcat和應用程序崩潰中得到IllegalStateException。如何解決MediaPlayer IllegalStateException問題?

這裏是我的MainActivity.java:

package com.orar.cngcnasaud; 

import android.app.Activity; 
import android.content.Intent; 
import android.content.res.Configuration; 
import android.media.MediaPlayer; 
import android.os.Bundle; 
import android.support.v4.app.ActionBarDrawerToggle; 
import android.support.v4.view.GravityCompat; 
import android.support.v4.widget.DrawerLayout; 
import android.util.Log; 
import android.view.MenuItem; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.AdapterView; 
import android.widget.Button; 
import android.widget.ListView; 
import android.widget.Toast; 

public class MainActivity extends Activity implements OnClickListener { 

    private ListView mDrawerList; 
    private DrawerLayout mDrawer; 
    private CustomActionBarDrawerToggle mDrawerToggle; 
    private String[] menuItems; 


    private static final String TAG = "AudioDemo"; 
    private static final String isPlaying = "Media is Playing"; 
    private static final String notPlaying = "Media has stopped Playing"; 

    MediaPlayer player; 
    Button playerButton; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main_drawer); 

     player = MediaPlayer.create(this, R.raw.gc); 
     player.setLooping(false); // Set looping 

     // Get the button from the view 
     playerButton = (Button) this.findViewById(R.id.buttonmp); 
     playerButton.setText(R.string.stop_label); 
     playerButton.setOnClickListener((OnClickListener) this); 

     // Begin playing selected media 
     demoPlay(); 

     // Release media instance to system 
     player.release(); 


     // enable ActionBar app icon to behave as action to toggle nav drawer 
     getActionBar().setDisplayHomeAsUpEnabled(true); 
     getActionBar().setHomeButtonEnabled(true); 

     mDrawer = (DrawerLayout) findViewById(R.id.drawer_layout); 

     // set a custom shadow that overlays the main content when the drawer 
     // opens 
     mDrawer.setDrawerShadow(R.drawable.drawer_shadow, GravityCompat.START); 

     _initMenu(); 
     mDrawerToggle = new CustomActionBarDrawerToggle(this, mDrawer); 
     mDrawer.setDrawerListener(mDrawerToggle); 
    } 

     public void onClick(View v) { 
      Log.d(TAG, "onClick: " + v); 
      if (v.getId() == R.id.buttonmp) { 
       playPause(); 
      } 

    } 




    private void demoPause() { 
     // TODO Auto-generated method stub 
     player.pause(); 
     playerButton.setText(R.string.play_label); 
     Toast.makeText(this, notPlaying, Toast.LENGTH_LONG).show(); 
     Log.d(TAG, notPlaying); 
} 

    private void playPause() { 
     // TODO Auto-generated method stub 
     if(player.isPlaying()) { 
      demoPause(); 
     } else { 
      demoPlay(); 
     } 
    } 

    private void demoPlay() { 
     // TODO Auto-generated method stub 
     player.start(); 
     playerButton.setText(R.string.stop_label); 
     Toast.makeText(this, isPlaying, Toast.LENGTH_LONG).show(); 
     Log.d(TAG, isPlaying); 
} 

這是不是整個活動中,我的活動都有一個滑動菜單太多,但這是我的MediaPlayer的代碼..謝謝了很多!

L.E:

的logcat:

02-24 19:09:24.011: E/AndroidRuntime(1323): FATAL EXCEPTION: main 
02-24 19:09:24.011: E/AndroidRuntime(1323): java.lang.IllegalStateException 
02-24 19:09:24.011: E/AndroidRuntime(1323):  at android.media.MediaPlayer.isPlaying(Native Method) 
02-24 19:09:24.011: E/AndroidRuntime(1323):  at com.orar.cngcnasaud.MainActivity.playPause(MainActivity.java:90) 
02-24 19:09:24.011: E/AndroidRuntime(1323):  at com.orar.cngcnasaud.MainActivity.onClick(MainActivity.java:72) 
02-24 19:09:24.011: E/AndroidRuntime(1323):  at android.view.View.performClick(View.java:4204) 
02-24 19:09:24.011: E/AndroidRuntime(1323):  at android.view.View$PerformClick.run(View.java:17355) 
02-24 19:09:24.011: E/AndroidRuntime(1323):  at android.os.Handler.handleCallback(Handler.java:725) 
02-24 19:09:24.011: E/AndroidRuntime(1323):  at android.os.Handler.dispatchMessage(Handler.java:92) 
02-24 19:09:24.011: E/AndroidRuntime(1323):  at android.os.Looper.loop(Looper.java:137) 
02-24 19:09:24.011: E/AndroidRuntime(1323):  at android.app.ActivityThread.main(ActivityThread.java:5041) 
02-24 19:09:24.011: E/AndroidRuntime(1323):  at java.lang.reflect.Method.invokeNative(Native Method) 
02-24 19:09:24.011: E/AndroidRuntime(1323):  at java.lang.reflect.Method.invoke(Method.java:511) 
02-24 19:09:24.011: E/AndroidRuntime(1323):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 
02-24 19:09:24.011: E/AndroidRuntime(1323):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 
02-24 19:09:24.011: E/AndroidRuntime(1323):  at dalvik.system.NativeStart.main(Native Method) 
+0

請張貼logcat以及 - >需要知道在哪條線崩潰 – donfuxx

+1

90和72是線..我編輯了logcat的第一篇文章.. – Ezekiel

+1

'[已解決]'和解決方案w如? – njzk2

回答

0

這聽起來像一個初始化的問題。雖然我沒有做過一噸的研究,這裏是一個可能的重複:

java.lang.IllegalStateException in MediaPlayer.isplaying() method

這裏是另一個副本,還指着初始化:

android java.lang.IllegalStateException MediaPlayer.isPlaying

這裏是開發文檔在MediaPlayer上,聲明調用isPlaying()之前,您需要初始化播放器:

http://developer.android.com/reference/android/media/MediaPlayer.html#isPlaying()

5

這裏:

if(player.isPlaying()) { 

你似乎調用ìsPlaying()方法而玩家尚未初始化。在這種情況下,這個方法拋出這個IllegalStateException。

我認爲原因是,在你的onCreate你實際上釋放的MediaPlayer,請參見(!):

// Release media instance to system 
    player.release(); 

你應該更好地運用活動的生命週期方法管理釋放你的MediaPlayer:

@Override 
public void onPause() { 
    player.stop(); 
    player.release(); 
    super.onPause(); 
} 

@Override 
public void onResume() { 
    player = MediaPlayer.create(this, R.raw.gc); 
    player.setLooping(false); 
    player.start(); 
    super.onResume(); 
} 
+0

就是這樣..它的工作,但唯一的問題是,歌曲播放時,應用程序啓動,而不是當按鈕按下..所以,我該如何改變它? – Ezekiel

+0

你不想在應用程序啓動時播放聲音?那麼,請從onCreate方法中刪除此行:'//開始播放所選媒體 demoPlay();' – donfuxx

+1

現在它正在運行完美。非常感謝 !!! – Ezekiel