我在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。
这符合预期。
使用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,即使我已经导航了。
我希望恢复后返回页面的应用程序已经打开。即保存实例状态或其他内容。
我认为FLAG_ONE_SHOT会照顾它。
任何意见都会受到赞赏。
答案 0 :(得分:1)
我相信njzk2的答案可能就足够了。但是,如果你想保存最新的网址,即使设备重新启动,你也可以使用以下内容:
示例在共享偏好设置中保存字符串,然后在应用中的任意位置再次检索它。
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);
答案 1 :(得分:0)
您的网址加载是在onResume
中完成的,每次导航到应用时都会调用该网址(通过任何方式打开应用,后退按钮,通知,最近的应用)。
您只需将其放入onNewIntent。
此webView.loadUrl("http://mysite.com");
应该放在onCreate
中,以避免返回主页。
答案 2 :(得分:0)
我不建议只是将代码移动到onCreate
,因为当您离开时,活动可以从内存中清除,onCreate
会再次发出意图。
你应该做的只是存储一个布尔变量onSaveInstanceState
,它指示意图是否已经被发送,然后将代码移动到onCreate
,并且只有在布尔值为{时才启动意图{1}}。