通过浏览器中的URL打开Android应用

时间:2015-05-30 13:01:09

标签: android intentfilter

好的,所以我知道除此之外还有更多内容。我在这里读了许多答案,所有人都说同样的话,但它并不适合我。我希望能够使用浏览器中带有自定义URL方案的链接打开Android应用程序。首先,我正在使用模拟器(实际上是Genymotion)所以我不知道这是否与它有任何关系。我看到的答案一直在说我需要的是与此类似的东西:

<intent-filter>
    <data android:scheme="myapp" android:host="hello"/>
    <action android:name="ANDROID.INTENT.ACTION.VIEW"/>
    <category android:name="ANDROID.INTENT.CATEGORY.BROWSABLE"/>
    <category android:name="ANDROID.INTENT.CATEGORY.DEFAULT"/>
</intent-filter>

我把它放在一个新的空白活动上,而不是主要的活动。

如果我理解正确,任何以myapp://hello开头的网址都会打开带有该意图过滤器的活动。但是,无论我尝试什么,我都会在浏览器中获得ERR_UNKNOWN_URL_SCHEME。这是Android浏览器,因为我无法将Chrome放在Genymotion上(至少没​​有免费版)。这是需要Chrome的吗?它是否只能在实际设备上完成?有什么我做错了吗?

4 个答案:

答案 0 :(得分:2)

如果网址为http://www.example.com/test/test1,则表示使用以下代码:

添加android清单文件

<activity
    android:name=".MainActivity"
    android:label="@string/app_name"
    android:screenOrientation="portrait"
    android:theme="@android:style/Theme.Holo.Light.NoActionBar">
    <intent-filter>
         <action android:name="android.intent.action.MAIN" />
         <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
    <intent-filter android:label="@string/app_name" >
         <action android:name="android.intent.action.VIEW" />
         <!-- Accepts URIs that begin with "http://example.com/test/test1" -->
         <data
             android:host="www.example.com"
             android:pathPrefix="/test/test1"
             android:scheme="http" />
         <category android:name="android.intent.category.DEFAULT" />
         <category android:name="android.intent.category.BROWSABLE" />
     </intent-filter>
</activity>

答案 1 :(得分:1)

这里有好几件事。

首先,正如Blackbelt所说,Android与大多数编程语言和开发环境一样区分大小写。根据这些操作和类别的文档,您需要将其更改为正确的案例:

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

其次,并非所有Web浏览器都处理myapp://之类的方案。我不知道任何司法管辖区的书籍都有任何法律强制要求开发者尊重他们。您将遇到三种基本模式:

  • 有些浏览器可以很好地处理它们

  • 某些浏览器会在网页上的链接中使用此类网址时处理这些网址,但如果在地址栏中输入网址则不会处理

  • 有些浏览器不会尝试找到处理它们的活动而只是一直失败

Google首选的替代方案是使用httphttps方案,并使用您控制的主机和路径。有些浏览器将始终打开网页,但其他浏览器会检查,看到有一个活动宣传支持该URL,并让用户选择如何处理它。 Android的“M”版本将提供可以绕过选择器的更多钩子("App Links")。此外,其他应用程序(例如,短信客户端,电子邮件客户端)通常会使http个链接可点击,允许用户选择打开您的应用,而很少有应用会知道myapp://hello有意义同样的方式。

答案 2 :(得分:0)

查看我提出的问题here.您应该查看我给予赏金的答案,并查看评论。

<强>要点:
使用android web-view的应用程序存在问题 问题不在您的最后,而是在您点击链接的应用中。在这种情况下你的浏览器。

您可以尝试使用HTML Viewer,它会起作用,请为我做好 一些默认的电子邮件应用程序,即Xperia确实有效。

现在在Google IO 2015中发布了Android M,他们也改进了应用程序深度链接(同样的事情),因为我们(开发人员)对这些内容抱怨很多。
您可以看到它herehere

我希望它有所帮助:)

答案 3 :(得分:0)

问题在于没有标准 - 所以每个解决方案都会有它的缺陷。

经过大量研究和工作后,我建议在任何地方使用 Android App Links(http/s 链接),并使用自定义应用方案 (myapp://...) 回退到具有深层链接的页面。< /p>

可以使用代理服务器处理回退 - 如果应用链接不起作用,它将打开浏览器以获取具有打开 URL 的网页。

它已经过测试并证明可以捕获所有已知的缺陷。

顺便说一句:当今大多数流行的浏览器都可以在 Android 上完美地处理自定义应用方案。

相关问题