3 回答
TA贡献1833条经验 获得超4个赞
您需要的只是一个简单的活动,什么也不做。这是一个例子:
public class NotificationActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Now finish, which will drop the user in to the activity that was at the top
// of the task stack
finish();
}
}
设置您的通知以开始此活动。确保清单中此活动的任务亲和力与应用程序中其他活动的任务亲和力相同(默认情况下,如果您未显式设置android:taskAffinity,则为)。
当用户选择此通知时,如果您的应用程序正在运行,则NotificationActivity将在应用程序任务中最顶层活动的顶部启动,并且该任务将被置于前台。当NotificationActivity完成时,它将简单地使用户返回到应用程序中最顶层的活动(即,当用户进入后台时将其停留在的任何位置)。
如果您的应用程序尚未运行,则此方法将无效。但是,您可以通过以下两种方法解决此问题:
当您的应用程序未运行时,请确保该通知未出现在通知栏中。
在NotificationActivity的onCreate()方法中,检查您的应用程序是否正在运行,以及是否未运行,请调用startActivity()并启动您的应用程序。如果这样做,请确保在启动应用程序时设置标志Intent.FLAG_ACTIVITY_NEW_TASK,以便该任务的根活动不是NotificationActivity。
TA贡献1829条经验 获得超9个赞
效果很好,谢谢大卫!以下类检查应用程序是否已在运行,如果尚未运行,则在完成之前启动它(如David在选项2中所建议的)。
public class NotificationActivity extends Activity
{
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
// If this activity is the root activity of the task, the app is not running
if (isTaskRoot())
{
// Start the app before finishing
Intent startAppIntent = new Intent(getApplicationContext(), MainActivity.class);
startAppIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(startAppIntent);
}
finish();
}
}
TA贡献1815条经验 获得超6个赞
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_LAUNCHER);
毫无疑问,这可行,但是问题是当您将意图设置为ACTION_MAIN时。这样,您将无法将任何捆绑软件设置为该意图。我的意思是,由于ACTION_MAIN不能包含任何额外的数据,因此不会从目标活动中接收您的原始数据。
取而代之的是,您可以将活动设置为singleTask并正常调用意图,而无需设置ACTION_MAIN并从目标活动的onNewIntent()方法接收意图。
但是请注意,如果您调用super.onNewIntent(intent); 然后将创建该活动的第二个实例。只是不要调用超级方法。
- 3 回答
- 0 关注
- 421 浏览
添加回答
举报