我正在实现一个webview加载一个web应用程序的URL,它通过套接字根据用户动作动态地向DOM添加内容。
当我关闭应用程序并且用户在Web应用程序中添加另一个元素时,应用程序用户会收到通知
如果我通过再次手动启动应用程序来重新打开应用程序,我可以轻松恢复webview并查看新内容
我的问题:我希望通过通知重新打开应用程序时实现相同的目标。目前我没有在onCreate()中获得savedInstanceState。
launchMode设置为singleTop
WebAppInterface.java中的代码:
System.out.println("WebAppInterface:" + MainActivity.MY_ACTIVITY_STATUS);
if (!MainActivity.MY_ACTIVITY_STATUS) {
Uri alarmSound = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(mContext)
.setSmallIcon(R.drawable.ic_launcher)
.setContentTitle("Neue Nachricht")
.setContentText(username + " hat dir geschrieben!")
.setAutoCancel(true)
.setSound(alarmSound)
.setVibrate(new long[] { 0, 1000, 1000, 1000, 1000 });
// The stack builder object will contain an artificial back stack for the
// started Activity.
// This ensures that navigating backward from the Activity leads out of
// your application to the Home screen.
TaskStackBuilder stackBuilder = TaskStackBuilder.create(mContext);
// Adds the back stack for the Intent (but not the Intent itself)
stackBuilder.addParentStack(MainActivity.class);
// Adds the Intent that starts the Activity to the top of the stack
Intent intent= new Intent(mContext, MainActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
stackBuilder.addNextIntent(intent);
PendingIntent resultPendingIntent = PendingIntent.getActivity(mContext, 0, intent, 0);
mBuilder.setContentIntent(resultPendingIntent);
// Sets an ID for the notification
int mNotificationId = 001;
// Gets an instance of the NotificationManager service
NotificationManager mNotifyMgr = (NotificationManager) mContext.getSystemService(NOTIFICATION_SERVICE);
// Builds the notification and issues it.
mNotifyMgr.notify(mNotificationId, mBuilder.build());
在我的MainActivity中恢复的代码:
if (savedInstanceState != null) {
myWebView.restoreState(savedInstanceState);
} else {
myWebView.loadUrl(URL_TO_WEB_APP);
}
到目前为止,我已经测试了Intent.FLAGS / launchMode的各种组合以及将savedInstanceState保存到私有静态变量并尝试基于此变量恢复webview(大量的" nativeOnDraw失败;清除背景颜色。"在LogCat中。
通过通知启动应用程序:
私有静态变量" myWebView" (我在其中存储webview)已设置
onCreate()参数Bundle savedInstanceState为null
私有静态变量" savedState" (上面提到的尝试安全savedInstanceState并使用它)设置
我为每一个提示和/或解决方案感到高兴,因为我目前完全无能为力。
答案 0 :(得分:0)
即使我确定我已经对此组合进行了数十次测试,但为了恢复WebView的状态,工作组合是:
在WebAppInterface.java中:
Intent intent= new Intent(mContext, MainActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_SINGLE_TOP);
stackBuilder.addNextIntent(intent);
PendingIntent resultPendingIntent = PendingIntent.getActivity(mContext, 0, intent, 0);
在AndroidManifest.xml中:
<activity
...
android:launchMode="singleTask" >
进一步模式MainActivity中的onResume()/ onNewIntent()不需要代码。