尝试通过通知启动时恢复活动状态

时间:2014-09-09 13:41:44

标签: android android-intent android-activity android-webview android-notifications

我正在实现一个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并使用它)设置

我为每一个提示和/或解决方案感到高兴,因为我目前完全无能为力。

1 个答案:

答案 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()不需要代码。