0

我在 OnResume 中加载了我的 webview 代码。这是所使用代码的概述。

public void onResume() {
    super.onResume(); 
    webView = (WebView)findViewById( R.id.webview );
    //webview options
    webView.setWebViewClient(new WebViewClient(){
        //some stuff here
    }
    });     

    Bundle extras1 = getIntent().getExtras();
    if (extras1 != null) {
       String theurl =  getIntent().getExtras().getString("url");
                     webView.loadUrl(theurl);   
    } else {
       webView.loadUrl("http://example.com");       
}

@Override
protected void onNewIntent(Intent intent) {
    super.onNewIntent(intent);
    setIntent(intent);
}

当应用程序启动时,没有额外的东西,所以我的默认 url 被加载。

如果应用程序是从通知启动的,则会加载自定义 url。

这按预期工作。

这是使用的 Pending.Intent 代码。

    notificationIntent.putExtra("url", url);
    notificationIntent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
    int requestID = (int) System.currentTimeMillis();
    PendingIntent intent = PendingIntent.getActivity(context, requestID, notificationIntent, PendingIntent.FLAG_ONE_SHOT);

待处理的意图触发并加载自定义 url。如果我然后切换到另一个应用程序,然后切换回我的主应用程序,即使我已经导航离开,挂起的意图也会再次被触发,将我带回自定义 url。

我希望应用程序在恢复后返回已经打开的页面。即保存实例状态或其他东西。

我认为 FLAG_ONE_SHOT 会处理它。

任何输入将不胜感激。

4

3 回答 3

1

我相信来自 njzk2 的答案可能就足够了。但万一您想保存最新的 url,即使设备重新启动,您也可以使用以下内容:

示例在共享首选项中保存字符串并在您的应用程序的任何位置再次检索它。

public class PreferencesData {

    public static void saveString(Context context, String key, String value) {
        SharedPreferences sharedPrefs = PreferenceManager
                .getDefaultSharedPreferences(context);
        sharedPrefs.edit().putString(key, value).commit();
    }

    public static String getString(Context context, String key, String defaultValue) {
        SharedPreferences sharedPrefs = PreferenceManager
                .getDefaultSharedPreferences(context);
        return sharedPrefs.getString(key, defaultValue);
    }
}

用法:

PreferencesData.saveString(context, "url", "http://mostrecenturl.com");
// retrieve
String url = PreferencesData.getString(context, "url", "http://mysite.com");

使用它在暂停时保存字符串,并在 onCreate 或任何需要信息的地方重新创建它

编辑:

在 PendingIntent 处:

PreferencesData.saveString(context, "url", url); // url is now persisted
notificationIntent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
int requestID = (int) System.currentTimeMillis();
PendingIntent intent = PendingIntent.getActivity(context, requestID, notificationIntent, PendingIntent.FLAG_ONE_SHOT);

并且在您的 onResume 活动中(或者 onNewIntent 如果您确实移动了它?)并不重要:

            webView = (WebView)findViewById( R.id.webview );
            //webview options
            webView.setWebViewClient(new WebViewClient(){
            //some stuff here
                    }
            });     
            // loads the saved url, or ur default page if it is the very first startup of your app
            String url = PreferencesData.getString(this, "url", "http://mysite.com");
            webView.loadUrl(url);  
于 2013-09-29T20:35:38.960 回答
0

您的 url 加载在 中完成onResume,每次您导航到应用程序时都会调用它(通过任何方式。打开应用程序、后退按钮、通知、最近的应用程序)。

您只需将它放在 onNewIntent 中。

webView.loadUrl("http://mysite.com");应该进入onCreate,以避免返回主页。

于 2013-09-29T20:31:00.180 回答
0

我不建议只是简单地将代码移动到,onCreate因为当您不在时,活动可能会从内存中清除,并且onCreate会再次发出意图。

您应该简单地做的是存储一个布尔变量onSaveInstanceState,该变量指示意图是否已经发送,然后将代码移动到onCreate并且仅在布尔值为 时启动意图False

于 2013-09-29T20:34:52.930 回答