按Home不起作用时,在onPause内启动Activity

时间:2015-10-07 14:37:24

标签: android

我的自助服务终端应用程序中有以下代码:

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);
  }
}

当我按下主页按钮时,我得到了日志,并且......没有任何反应。

如何让我的活动再次出现?

2 个答案:

答案 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