我有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"); }
但它没有帮助.
通过以下代码删除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);
希望这会帮助你.
这里的线程很旧,但是如果有人正在寻找这个线程:
您可以通过检查标志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 }