Android从服务开放浏览器避免多个标签

时间:2011-08-25 21:02:55

标签: java android

我正在尝试使用在浏览器的当前选项卡中打开的链接从我的服务打开浏览器窗口。当我使用

Intent intent = new Intent(Intent.ACTION_VIEW,Uri.parse("http://www.google.com"));
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
context.startActivity(intent);

如果浏览器在我的服务启动之前打开并位于前台,浏览器会在同一窗口/选项卡中打开链接。如果浏览器已最小化且服务启动了意图,则浏览器将在新窗口/选项卡中打开网页。

我不能使用Web视图,因为它需要在Web浏览器中,它只会处理默认浏览器。我已经在Open an url in android browser, avoid multiple tabs检查了该帖子,但它没有答案。我也试过强制关闭浏览器,但这也行不通。

感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

如果您想使用您的应用来触发该意图..请直接通过包名称调用您的应用 检查以下代码:

Intent in = getPackageManager().getLaunchIntentForPackage("com.package.myappweb");
in.putExtra("myURL","http://www.google.com");
in.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity( in );

您可以通过意图传递网址,并通过以下方式在您的应用中获取:

String url=getIntent().getStringExtra("myURL");
if(url!=null){
/// launch app and use one tab for showing the webpage
}else{
//launch app normally.
}

您提到的用于将应用程序用作网络应用程序的代码..这将显示弹出窗口,用于选择任何浏览器来处理链接..不会是任何应用程序想要打开链接

祝你好运,

答案 1 :(得分:1)

避免多个标签的方法如下:

Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(uri);
intent.putExtra(Browser.EXTRA_APPLICATION_ID, getPackageName());
startActivity(intent);

EXTRA_APPLICATION_ID将包含您的应用的ID,浏览器将回收您的应用程序打开的选项卡,而不是打开新选项卡。这样,您的应用程序打开的所有页面都将共享相同的选项卡,并且您不会在浏览器中显示“tab inflation”。