我的自助服务终端应用程序中有以下代码:
class MyActivity extends AppCompatActivity
{
...
@Override
protected void onPause()
{
super.onPause();
Log.d("DEBUG", "Pause");
Intent intent = new Intent(MyActivity.this, MyActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
intent.setAction(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_LAUNCHER);
startActivity(intent);
}
}
当我按下主页按钮时,我得到了日志,并且......没有任何反应。
如何让我的活动再次出现?
答案 0 :(得分:1)
onPause()
通常不是开展新活动的好地方。您的活动通常会暂停,因为另一个应用程序正在启动,用户关闭了屏幕,或点击主页按钮。
无论发生哪种情况,这件事情都会继续发生。屏幕仍将关闭,其他活动仍将启动,或者仍会显示用户的主屏幕。
我会重新评估你在做什么以及你做这件事的策略。
修改的: 由于您正在开发一个自助服务终端应用程序,因此前进的道路略有不同。你的方法仍然不行,所以这里有一些选择。
从API 21开始,您应该使用startLockTask()
将用户锁定到当前任务中。只要有可能,您应该要求自助服务终端设备运行API 21或更高版本,以便您可以利用此功能。
在旧版Android中,您需要通过将HOME
类别添加到清单中的Activity的intent过滤器,告诉操作系统您的应用是“启动器”。当用户尝试导航回家时,这将重新启动您的应用。您还需要将设备配置为默认使用您的应用作为“启动器”来锁定用户。See this StackOverflow post for more detail。
答案 1 :(得分:0)
好吧,使用正常的Intent方法无效。
幸运的是,有一种解决方法可以让Activity再次出现。像这样使用PendingIntent:
Intent intent = new Intent(getBaseContext(), MyActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
Intent mStartActivity = new Intent(this, MyActivity.class);
int mPendingIntentId = 789;
PendingIntent mPendingIntent = PendingIntent.getActivity(this, mPendingIntentId, mStartActivity, PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManager mgr = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
mgr.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), mPendingIntent);
唯一的缺点是AlarmManager在 5秒之后启动,无论我用currentTimeMillis()
设置它。它是操作系统的known limitation。