onResume在应用程序最小化后无法工作

问题描述:

我的一切工作正常,但是当我最小化该应用程序然后返回并尝试恢复我的图像按钮时,将不会播放与它们关联的音频文件。我必须返回到应用程序的开始屏幕,然后返回到带有图像按钮的活动页面,让它们再次播放音频。任何提示都会有所帮助。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

您在每个颜色按钮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。你也明白了为什么我得到了我的结果。 –