在我的Android应用中,此代码将打开/恢复活动
NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
Intent notIntent = new Intent(context, SpeciesScreen.class);
notIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
PendingIntent pIntent = PendingIntent.getActivity(context.getApplicationContext(), 0, notIntent, 0);
Notification noti = new Notification.Builder(context)
.setContentTitle("Scan Complete")
.setSmallIcon(R.drawable.ic_launcher)
.setContentIntent(pIntent)
.setAutoCancel(true)
.build();
notificationManager.notify(0, noti);
行为是,如果应用程序在SpeciesScreen上运行并最小化,它将恢复它,如果它已经运行或退出,那么它将尝试打开SpeciesScreen。注意:SpeciesScreen不是最初运行的默认活动。
但我想要的是(点击运行意图的通知时):
如果它被最小化(无论它当前在哪个活动上),只需恢复它,不要打开另一个活动。
如果它正在运行(无论其当前处于何种活动状态),请不执行任何操作。
如果已关闭,则打开应用程序,就好像您点击了主屏幕上的图标一样。
有谁知道怎么做?
由于
答案 0 :(得分:0)
好的,这是我得到的黑客方式,也许有人可以改进它。
public Boolean paused = false;
@Override
protected void onPause() {
super.onPause();
paused = true;
}
@Override
protected void onResume() {
super.onResume();
paused = false;
}
private void setUpScreen() {
if (getIntent().getExtras() != null) {
// ran normally
} else {
// opened from notification
finish();
// open default activity
Intent myIntent = new Intent(this, SplashScreen.class);
startActivity(myIntent);
}
}
在异步
中@Override
protected void onPostExecute(List<CompareResult> compareResults) {
if (context.paused) {
showNotification();
}
}
private void showNotification() {
NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
Intent notIntent = new Intent(context, SpeciesScreen.class);
notIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
PendingIntent pIntent = PendingIntent.getActivity(context.getApplicationContext(), 0, notIntent, 0);
Notification noti = new Notification.Builder(context)
.setContentTitle("Scan Complete")
.setSmallIcon(R.drawable.ic_launcher)
.setContentIntent(pIntent)
.setAutoCancel(true)
.build();
notificationManager.notify(0, noti);
}