簡體   English   中英

打開其他活動時,背景上的android Media Player無法停止播放

[英]android media player on background not stop playing while open other activity

我的應用程序在我的主要活動中有3個選項(按鈕),媒體播放器在應用程序啟動時播放歌曲。 啟動應用程序時,媒體播放器會正確啟動,但是如果我在音頻仍在播放時按按鈕開始新的活動,則應用程序崩潰(不幸的是,應用程序已停止)。 如果我在消息中按“確定”,則它將打開新活動,媒體播放器停止。

我的目的是開始新活動並停止媒體播放器(歌曲)。

有人可以幫我解決這些問題嗎?

TextView  logoname;
Button autismlogo,visionlogo,hearinglogo;
private SensorManager mSensorManager;
private ShakeEventListener mSensorListener;
MediaPlayer player; 


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);


logoname = (TextView)findViewById(R.id.logotext);
autismlogo = (Button)findViewById(R.id.autismbutton);
visionlogo = (Button)findViewById(R.id.visionbutton);
hearinglogo = (Button)findViewById(R.id.hearingbutton);



final MediaPlayer player = MediaPlayer.create(MainActivity.this, R.raw.welcome); 
player.start();

// ---SENSORS-------- 

mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
mSensorListener = new ShakeEventListener();   

mSensorListener.setOnShakeListener(new ShakeEventListener.OnShakeListener() {   
  public void onShake() {
      Intent vision = new Intent(getApplicationContext(),Vision_main.class);
    startActivity(vision);
  }
});


// ----ON CLICK EVENTS -----------
autismlogo.setOnClickListener(new View.OnClickListener() {
    public void onClick(View v) {


        Intent autism = new Intent(getApplicationContext(),Autism_main.class);
        startActivity(autism);

    }

});

visionlogo.setOnClickListener(new View.OnClickListener() {
    public void onClick(View v) {



        Intent vision = new Intent(getApplicationContext(),Vision_main.class);
        startActivity(vision);

    }
});

hearinglogo.setOnClickListener(new View.OnClickListener() {

    public void onClick(View v) {

        Intent hearing = new Intent(getApplicationContext(),Hearing_main.class);
        startActivity(hearing);     
    }
});

}

public void onResume() {
    super.onResume();

    mSensorManager.registerListener(mSensorListener,
            mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),
            SensorManager.SENSOR_DELAY_UI);
}

public void onPause() {
    super.onPause();
    player.stop();
    mSensorManager.unregisterListener(mSensorListener);
}

記錄貓錯誤

E / AndroidRuntime(27610):致命異常:main E / AndroidRuntime(27610):進程:com.giorgospapadopoulos.move4all,PID:27610 E / AndroidRuntime(27610):java.lang.RuntimeException:無法暫停活動{com.giorgospapadopoulos .move4all / com.giorgospapadopoulos.move4all.MainActivity}:java.lang.NullPointerException:嘗試在null對象引用E / AndroidRuntime(27610)上調用虛擬方法'void android.media.MediaPlayer.stop()':在android上。 app.ActivityThread.performPauseActivity(ActivityThread.java:3260)E / AndroidRuntime(27610):在android.app.ActivityThread.performPauseActivity(ActivityThread.java:3219)E / AndroidRuntime(27610):在android.app.ActivityThread.handlePauseActivity( ActivityThread.java:3194)E / AndroidRuntime(27610):位於android.app.ActivityThread.access $ 1000(ActivityThread.java:151)E / AndroidRuntime(27610):位於android.app.ActivityThread $ H.handleMessage(ActivityThread.java :1314)E / AndroidRuntime(27610):位於android.os.Handler.dispatchMessage(Handler.java:102)E / Andro idRuntime(27610):在android.os.Looper.loop(Looper.java:135)E / AndroidRuntime(27610):在android.app.ActivityThread.main(ActivityThread.java:5254)E / AndroidRuntime(27610):在java.lang.reflect.Method.invoke(本機方法)E / AndroidRuntime(27610):在java.lang.reflect.Method.invoke(Method.java:372)E / AndroidRuntime(27610):在com.android.internal .os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:903)E / AndroidRuntime(27610):at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)E / AndroidRuntime(27610):由引起:java.lang.NullPointerException:嘗試在空對象引用E / AndroidRuntime(27610)上調用虛擬方法'void android.media.MediaPlayer.stop()':com.giorgospapadopoulos.move4all.MainActivity.onPause(MainActivity.java :220)E / AndroidRuntime(27610):位於android.app.Activity.performPause(Activity.java:6101)E / AndroidRuntime(27610):位於android.app.Instrumentation.callActivityOnPause(Instrumentation.java:1310)E / AndroidRuntime (27610):位於android.app.Activi tyThread.performPauseActivity(ActivityThread.java:3246)E / AndroidRuntime(27610):...還有11個

您的錯誤很清楚。 您在onPause()方法的第120行獲得NullPointerException 這是因為您尚未創建player對象,而是嘗試調用它的方法之一。

您已將其聲明為全局變量,但尚未創建。 您可以在onCreate()方法中創建另一個player對象,但這只是一個局部變量。

  1. 首先排隊

final MediaPlayer player = MediaPlayer.create(MainActivity.this, R.raw.welcome);

不要將MediaPlayer播放器聲明為本地播放器,它應該是全局播放器。

  1. onPause()使用它

    if(player!= null){player.stop(); }

  2. onResume()

    if(player!= null){player.start(); }

通過上述代碼播放器將在前景中的應用程序播放音樂,背景播放器中的應用程序停止播放音樂以及應用程序再次進入前景狀態時播放音樂。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM