Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 应用程序最小化后onResume不工作_Android_Android Lifecycle - Fatal编程技术网

Android 应用程序最小化后onResume不工作

Android 应用程序最小化后onResume不工作,android,android-lifecycle,Android,Android Lifecycle,我有其他一切工作正常,但当我最小化该应用程序,然后返回并尝试恢复我的图像按钮将不会播放与它们相关的音频文件。我必须返回应用程序的开始屏幕,并返回带有图像按钮的活动页面,以便让它们再次播放音频。任何提示都会有帮助 public class ColorPage extends AppCompatActivity { Context context = this; MediaPlayer media = null; @Override protected void onDestroy() {

我有其他一切工作正常,但当我最小化该应用程序,然后返回并尝试恢复我的图像按钮将不会播放与它们相关的音频文件。我必须返回应用程序的开始屏幕,并返回带有图像按钮的活动页面,以便让它们再次播放音频。任何提示都会有帮助

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类的其余代码,因此我的问题更清楚一些。

您在每个颜色按钮中的检查只在不为null时才单击初始化媒体(非常奇怪),在这种情况下,这也恰好是问题所在。您的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();
您已在onPause中将media设置为null,假设您只想从恢复时音频停止的位置开始。如果您不想自动启动,那么似乎根本没有必要实现onResume

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

只是一个猜测,但是如果
media!=空
,否则如果它为空,则只需重新创建它。简单的键入=null,not==nullWell,您正在将
onPause()
中的
media
成员变量置零。假设您打算在
onResume()中写入
if(media!=null)
,为什么按钮不再播放任何声音是完全有道理的:您永远不会重新初始化
媒体
。我使用的音频剪辑非常短,不需要在遗漏的地方拾取,因此我很感谢您指出不需要恢复的提示。你也很清楚为什么我会得到我想要的结果。