我有一个应用程序,启动时会播放声音并开始/恢复游戏。但是我发现,如果我的应用程序是将手机置于待机状态(屏幕关闭)时最后运行的应用程序,并且我只需按菜单按钮即可查看时间,则手机会在后台播放游戏和声音(实际上应用程序并不可见,只有显示日期/时间的屏幕,但 onResume 必须已经在我的应用程序中被调用)。我应该怎么办呢?有没有一种方法可以辨别是什么重新激活了应用程序,然后添加一个条件语句,仅当应用程序实际可见时才启动游戏?
以下是我的onResume的代码片段:
我能想到的唯一防止游戏在屏幕开启时(即使应用程序不可见)启动的方法是在onPause()的最后一行放置this.finish()... 但这会强制你每次想要返回到它时重新启动应用程序,因为进程本身被杀死了(这很好,因为我的onPause保存持久数据,但这不是一个优雅的解决方案)。请帮忙。
以下是我的onResume的代码片段:
@Override
protected void onResume()
{
mySaveGame = Utilities.loadSavegame(this);
//check the savegame
if(mySaveGame!=null)
{
//start game using savegame values
this.startFromSavedGame(mySaveGame.getIsLevelComplete());
}
else
{
//run the 1st-run components
this.startFirstRun();
}
super.onResume();
}
我能想到的唯一防止游戏在屏幕开启时(即使应用程序不可见)启动的方法是在onPause()的最后一行放置this.finish()... 但这会强制你每次想要返回到它时重新启动应用程序,因为进程本身被杀死了(这很好,因为我的onPause保存持久数据,但这不是一个优雅的解决方案)。请帮忙。
ACTION_SCREEN_OFF
注册一个registerReceiver()
。在这一点上,弹出一个AlertDialog
,内容类似于“播放已暂停”,并提供“恢复”和“关闭”按钮。如果用户点击“恢复”,则触发您通常在onStart()
中执行的逻辑。如果用户点击“关闭”,则结束您的活动。或者类似于此类的操作。 - CommonsWare