2017-10-10 63 views
0

我的一切工作正常,但是當我最小化該應用程序然後返回並嘗試恢復我的圖像按鈕時,將不會播放與它們關聯的音頻文件。我必須返回到應用程序的開始屏幕,然後返回到帶有圖像按鈕的活動頁面,讓它們再次播放音頻。任何提示都會有所幫助。onResume在應用程序最小化後無法工作

public class ColorPage extends AppCompatActivity { 

Context context = this; 
MediaPlayer media = null; 

@Override 
protected void onDestroy() { 
    // TODO Auto-generated method stub 
    super.onDestroy(); 
    if(media!=null){ 
     media.stop(); 
     media.release(); 
     media = null; 
    } 
} 

@Override 
protected void onResume() { 
    super.onResume(); 
    if(media == null) { 
     media.start(); 

    } 
} 

@Override 
protected void onPause() { 
    super.onPause(); 
    if(media != null) { 
     media.pause(); 
     media.release(); 
     media = null; 
    } 
} 

這是我正在使用的代碼。除了onResume()之外,其他一切似乎都有效。

我還使用if(media!= null),但它所做的只是導致每次打開活動頁面時自動播放最後一個音頻文件。如果(media == null)是我嘗試的最後一件事。

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

    ImageButton pinkB = (ImageButton) findViewById(R.id.pinkButton); 
    ImageButton yellowB = (ImageButton) findViewById(R.id.yellowButton); 
    ImageButton purpleB = (ImageButton) findViewById(R.id.purpleButton); 
    ImageButton blueB = (ImageButton) findViewById(R.id.blueButton); 
    ImageButton greenB = (ImageButton) findViewById(R.id.greenButton); 
    ImageButton redB = (ImageButton) findViewById(R.id.redButton); 


    media = MediaPlayer.create(context, R.raw.purpleaudiotest); 
    purpleB.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 

      try { 
       if (media != null) { 
        media.stop(); 
        media.release(); 
        media = MediaPlayer.create(context, R.raw.purpleaudiotest); 
       } 
       media.start(); 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
     } 
    }); 

    media = MediaPlayer.create(context, R.raw.blueaudiotest); 
    blueB.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 

      try { 
       if (media != null) { 
        media.stop(); 
        media.release(); 
        media = MediaPlayer.create(context, R.raw.blueaudiotest); 
       } 
       media.start(); 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
     } 
    }); 

    media = MediaPlayer.create(context, R.raw.redaudiotest); 
    redB.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 

      try { 
       if (media != null) { 
        media.stop(); 
        media.release(); 
        media = MediaPlayer.create(context, R.raw.redaudiotest); 
       } 
       media.start(); 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
     } 
    }); 

    media = MediaPlayer.create(context, R.raw.greenaudiotest); 
    greenB.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 

      try { 
       if (media != null) { 
        media.stop(); 
        media.release(); 
        media = MediaPlayer.create(context, R.raw.greenaudiotest); 
       } 
       media.start(); 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
     } 
    }); 

    media = MediaPlayer.create(context, R.raw.yellowaudiotest); 
    yellowB.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 

      try { 
       if (media != null) { 
        media.stop(); 
        media.release(); 
        media = MediaPlayer.create(context, R.raw.yellowaudiotest); 
       } 
       media.start(); 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
     } 
    }); 

    media = MediaPlayer.create(context, R.raw.pinkaudiotest); 
    pinkB.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 


      try { 
       if (media != null) { 
        media.stop(); 
        media.release(); 
        media = MediaPlayer.create(context, R.raw.pinkaudiotest); 
       } 
       media.start(); 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 

     } 
    }); 

} 

} 

這是類ColorPage的代碼的其餘部分,所以我的問題是更清晰一點。

+2

只是一個猜測,但你不想讓它做些什麼,如果'media!= null',否則如果它是null,那麼你只需要重新創建它。 – DigitalNinja

+0

簡單的錯字,!= null,not == null –

+1

好吧,您已將'onPause()'中的'media'成員變量清零。假設你打算在'onResume()'中寫入'if(media!= null)',那麼爲什麼按鈕不再播放任何聲音是完全有意義的:你永遠不會重新初始化'media'。 – Karakuri

回答

0

您在每個顏色按鈕onClick中的檢查只在初始化媒體時,它不是空,(非常奇怪),在這種情況下,它也碰巧是問題。你的onPause會消除媒體,而onResume不會重新初始化它,所以如果(media!= null)總是爲false,事實上,你可能會在media.start()之後獲得npe。像這樣處理點擊。

  if (media != null) { 
       media.stop(); 
       media.release(); // release previous media if not null 
      } 

      // initialize this outside of the if block 
      media = MediaPlayer.create(context, R.raw.pinkaudiotest); // whatever color in each 
      media.start(); 

你已經設置的媒體爲NULL的onPause,假設你想剛開始在音頻已經離開的onResume。如果你不想自動啓動,那麼根本就沒有實現onResume的意義。

@Override 
protected void onResume() { 
    super.onResume(); 
    if(media != null) { 
     media.start(); 
    } 
} 
+0

我正在使用這麼短的音頻剪輯,它不需要被拾起,因此我很感激你指出這個提示不需要onResume。你也明白了爲什麼我得到了我的結果。 –

相關問題