当前位置:  开发笔记 > 编程语言 > 正文

如何在从url打开后清除活动中的意图数据?

如何解决《如何在从url打开后清除活动中的意图数据?》经验,为你挑选了2个好方法。

我有Activity,可以直接从浏览器启动,调用url.

活动代码:

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        Uri data = getIntent().getData();
        Log.d(getClass().getName(), "onCreate data=" + data);

        getIntent().replaceExtras(new Bundle());
        getIntent().setAction("");
        getIntent().setData(null);
        getIntent().setFlags(0);

        if (data != null && isValidUrl(data)) {
            // open some special fragment
        } else {
            // open main fragment
        }
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        Log.d(MainActivity.class.getName(), "onDestroy");
    }

    //...
}

应用清单代码:

    ...

    
        
            
            
        
        
            

            
            

            
        
    

    ...

这段代码完美无缺.当我使用link(http://example.com/somepage.html)从浏览器打开应用程序时,我有这个输出:

D/com.package.MainActivity: onCreate data=http://example.com/somepage.html

但是如果我离开应用程序(使用后退按钮)并再次打开应用程序,从最近的菜单中,我得到相同的结果:

D/com.package.MainActivity: onDestroy
D/com.package.MainActivity: onCreate data=http://example.com/somepage.html

我想在方法中清除意图数据onCreate.或者,从最近的菜单启动应用程序时,有没有办法检测?

UPD: 我试过这样做:

@Override
protected void onDestroy() {
    super.onDestroy();

    getIntent().replaceExtras(new Bundle());
    getIntent().setAction("");
    getIntent().setData(null);
    getIntent().setFlags(0);

    Log.d(MainActivity.class.getName(), "onDestroy");
}

但它没有帮助.



1> Hiren Patel..:

通过以下代码删除intent.getData():

编辑1:

Uri data = getIntent().getData();
    Log.d(getClass().getName(), "onCreate data=" + data);

    if (data != null && isValidUrl(data)) {
        // open some special fragment
    } else {
        // open main fragment
    }

getIntent().setData(null);

编辑2:

getIntent().replaceExtras(new Bundle());
getIntent().setAction("");
getIntent().setData(null);
getIntent().setFlags(0);

希望这会帮助你.



2> 小智..:

这里的线程很旧,但是如果有人正在寻找这个线程:

您可以通过检查标志FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY来检查是否由于最近启动的应用程序启动而发送了您的意图

    if ((getIntent().getData() != null) && ((getIntent().getFlags() & Intent.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY) == 0)) {
            //Handle the url passed through the intent
        } else {
            //proceed as normal
        }


是`(getIntent()。getFlags()&Intent.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY)== Intent.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY来检查活动是否已从历史记录中启动:这是一个好主意,并且有效
推荐阅读
echo7111436
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有