【问题标题】:Preventing browser loop防止浏览器循环
【发布时间】:2011-12-08 00:40:21
【问题描述】:

我创建了一个在单击特定 URL 时打开的应用。显然我有这样的东西:

        <intent-filter>
        <data android:scheme="http" android:host="example.com"/>
        <action android:name="android.intent.action.VIEW"/>
        <category android:name="android.intent.category.BROWSABLE"/>
        <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>

所以这一切都很好,每当有人点击带有http://example.com/whatever/stuff 的链接时...它都会打开我的应用程序。但是,在我的应用程序中,在做了一些事情之后,我想将用户发送回默认浏览器(或者他们在单击链接开始时使用的任何浏览器/Web 视图)。我的问题是我最终创建了一个循环:

  1. 用户点击链接http://example.com/xxx,我的应用就会打开。
  2. 我的应用程序做了一些事情,现在想将用户发送到不同的 URL,例如。 http://example.com/yyy
  3. 我的应用发送的意图最终只是回到自身(我的应用)。

    Intent httpIntent = new Intent(Intent.ACTION_VIEW);
    String theNewURL = http://example.com/yyy;
    httpIntent.setData(Uri.parse(theNewURL));
    startActivity(httpIntent);
    

如何让我的httpIntent 使用默认浏览器(或用户从哪里开始)而不是再次调用我的应用程序?

编辑:我已经能够以临时的方式解决问题,方法是制作我自己的一个域(作为一种别名)的 CNAME 记录,该记录与http://example.com 位于同一位置。这很糟糕,因为用户现在看到了不同的 URL,但它仍然有效,因为它没有调用意图。 (当我谈论意图时,我是否使用了正确的语言?)

【问题讨论】:

    标签: android url android-intent android-browser android-view


    【解决方案1】:
    Intent HttpIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://example.com/yyy"));
    
    startActivity(HttpIntent); 
    

    【讨论】:

    • 我已经这样做了。正如我所说,我的应用程序会侦听http://example.com/anything,并在将其设置为默认操作时最终调用自己。否则菜单会弹出并询问用户想用它做什么。无论哪种方式,我都希望它使用浏览器,而不是我的应用程序。
    • 您在哪个操作系统版本上进行测试?有一些奇怪的差异导致它工作/不工作。有些人使用很奇怪: final Intent intent = new Intent(Intent.ACTION_VIEW).setData(Uri.parse(url)); activity.startActivity(intent);
    • 我正在使用带有 CM 7.1.0 (Android 2.3.7) 的 Nexus One。但无论哪种方式,我看到的唯一区别是包含final 以及它全部在一行中的事实。这仍在重新启动我的应用程序。不过我会在不同版本的模拟器上试一试。
    猜你喜欢
    • 2017-12-20
    • 1970-01-01
    • 1970-01-01
    • 2015-01-22
    • 1970-01-01
    • 1970-01-01
    • 2011-04-28
    • 2017-02-06
    • 1970-01-01
    相关资源
    最近更新 更多