我有一个Android应用程序,当它运行服务时,我想在状态栏上显示通知。然后用户可以通过按HOME键导航到其他应用程序。但是,当我尝试通过通知图标将之前运行的应用程序恢复到Front时,现有活动存在一些问题。即使我将其声明为“单顶”模式(我想运行现有的活动,因为有关联的服务正在运行),不知何故,在OnResume之前已经调用了活动的OnDestroy。这是我创建通知对象的代码。你能指点我错了吗?谢谢。
private void showNotification ()
{
Intent toLaunch = new Intent(getApplicationContext(),
MySingleTopActivity.class);
PendingIntent intentBack = PendingIntent.getActivity(getApplicationContext(), 0,toLaunch, PendingIntent.FLAG_UPDATE_CURRENT);
notification.setLatestEventInfo(getApplicationContext(),
getText(R.string.GPS_service_name), text, intentBack);
....
}
答案 0 :(得分:23)
private void showNotification() {
Intent toLaunch = new Intent(getApplicationContext(), MySingleTopActivity.class);
//add these two lines will solve your issue
toLaunch.setAction("android.intent.action.MAIN");
toLaunch.addCategory("android.intent.category.LAUNCHER");
PendingIntent intentBack = PendingIntent.getActivity(getApplicationContext(), 0, toLaunch, PendingIntent.FLAG_UPDATE_CURRENT);
notification.setLatestEventInfo(getApplicationContext(), getText(R.string.GPS_service_name), text, intentBack);
...
}
答案 1 :(得分:8)
我建议你这样做,
private void showNotification ()
{
Intent toLaunch = new Intent(getApplicationContext(), DummyActivity.class);
// You'd need this line only if you had shown the notification from a Service
toLaunch.setAction("android.intent.action.MAIN");
PendingIntent intentBack = PendingIntent.getActivity(getApplicationContext(), 0,toLaunch, PendingIntent.FLAG_UPDATE_CURRENT);
....
}
DummyActivity应该只是一个总是在oncreate事件中完成的活动。
在清单文件中,添加以下行
<activity class=".DummyActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
</intent-filter>
</activity>
我希望这会有所帮助......
答案 2 :(得分:0)
启动软件包意图的另一种方法。
private void NotificationwithLaucherSelfPackage(Context context , int notification_id){
Notification noti = new Notification.Builder(context)
.setContentTitle("Your Title")
.setContentText("Your Text")
.setSmallIcon(R.drawable.abc_ic_menu_share_mtrl_alpha)
.setContentIntent(PendingIntent.getActivity( context ,notification_id , getLauncherIntent(context) , PendingIntent.FLAG_UPDATE_CURRENT))
.build();
NotificationManager notificationManager = (NotificationManager) context.getSystemService(context.NOTIFICATION_SERVICE);
}
private Intent getLauncherIntent(Context context){
return context.getPackageManager().getLaunchIntentForPackage(context.getPackageName());
}
答案 3 :(得分:-2)
当活动在后台时,Android可能会随时终止活动以释放资源。有关生命周期的完整详细信息,请参阅Activity文档。
您的活动需要准备好在onPause或onSaveInstanceState方法中保存其状态。上面引用的文档提供了有关保存持久状态的其他详细信息。