使用后清除待定意图/ One Shot

时间:2013-09-29 20:25:21

标签: android android-intent android-pendingintent

我在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会照顾它。

任何意见都会受到赞赏。

3 个答案:

答案 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}}。