从Android浏览器/ Chrome启动自定义Android应用程序

Vla*_*zki 28 android intentfilter android-intent

首先,我的问题非常类似于,这个这个.我想要实现的Android文档就在这里.我无法使用这些资源来使用它,所以请不要将其标记为重复,因为它不是.

我有一个网站和一个Android应用程序.用户将能够扫描包含http://mywebsite.com/map/等链接的QR码.当用户尝试打开此链接时,我希望Android向他显示一个选择器对话框,他可以选择使用我的应用程序打开该链接.如果我的应用程序没有安装,它应该进入指定的网站.

我知道当用户导航到该地址时,Chrome会通过打开选择器对话框来实现此目的.例如,尝试下载Stack Exchange应用程序并在Chrome中转到此问题.它会显示:

选择器对话框的屏幕截图.

按照上述答案中的建议后,我在AndroidManifest.xml中添加了以下代码:

<intent-filter>
    <action android:name="android.intent.action.VIEW" />
    <action android:name="android.intent.action.SEND" />

    <category android:name="android.intent.category.DEFAULT" />
    <category android:name="android.intent.category.BROWSABLE" />

    <data
        android:host="mywebsite.com"
        android:path="/map"
        android:scheme="http" />
    <data
        android:host="mywebsite.com"
        android:path="/animals"
        android:scheme="http" />
    <data
        android:host="mywebsite.com"
        android:path="/articles"
        android:scheme="http" />
</intent-filter>
Run Code Online (Sandbox Code Playgroud)

另外,我尝试将android:mimeType ="text/plain"添加到数据中,但它没有帮助.

问题是,当我访问http://mywebsite.com/maphttp://mywebsite.com/map/时, Chrome只会打开网页而不显示选择器对话框.

我想提一下:

  • 在Android文档之后,我已将此代码添加到AndroidManifest.xml中的一个活动结构中.由于我不确定这是添加它的最佳位置,我还尝试将其添加到应用程序结构之外并直接在应用程序结构中添加但是它不起作用
  • 这是我实现的唯一代码.如果需要其他东西请告诉我.据我所知,只有在使用自定义模式时才需要在网页上添加href
  • 我不想使用自定义架构来实现这一目标
  • 我正在使用运行Android 4.4.2的Nexus 4进行开发(最新)

And*_*cko 61

你需要像这样设置它:

<intent-filter>
        <action android:name="android.intent.action.VIEW" />

        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="android.intent.category.BROWSABLE" />

        <data
            android:host="example.com"
            android:pathPrefix="/someresource/"
            android:scheme="http" />
        <data
            android:host="www.example.com"
            android:pathPrefix="/someresource/"
            android:scheme="http" />
    </intent-filter>
Run Code Online (Sandbox Code Playgroud)

请注意,在您的情况下,您需要使用android:pathPrefix而不是android:path.

  • 必须在关于此主题的每个答案中突出显示,这令人惊讶地错过了pathPrefix元素,并且似乎仍然适用于许多用户.只是没有它在铬上工作.万分感谢. (2认同)

Eri*_*uff 6

只是为了确保您应该重置应用程序的首选项,以防您不小心将其设置为始终打开chrome中的链接而不是显示选择器对话框.一旦"Always"用于打开匹配的uri,它将永远不会显示选择器.

其次,您可以根据需要在intent过滤器中包含尽可能多的数据元素,但不必重复信息.你可以这样做:

<data android:host="mywebsite.com"/>
<data android:scheme="http"/>
<data android:path="/map"/>
<data android:path="/animals"/>
<data android:path="/articles"/>
Run Code Online (Sandbox Code Playgroud)

但请注意,对于路径,您只需使用通配符即可

<data android:path="/.*"/>
Run Code Online (Sandbox Code Playgroud)

考虑添加一个额外的

<data android:host="www.mywebsite.com"/>
Run Code Online (Sandbox Code Playgroud)

最后,您可能不想显示选择器对话框,而是直接打开特定的应用程序意图/活动.在您的网站上,如果您检测到Android用户代理,您可以通过以下方式创建链接URL:

<a href="intent://mywebsite.com/articles#Intent;package=com.myapp;scheme=http;end;"/>
Run Code Online (Sandbox Code Playgroud)

有关详细信息,请参阅此处如何从Android中的Web浏览器(Chrome)打开任何应用程序?我如何处理A Href链接?

请注意,使用此方法,如果未安装该应用,则系统会将用户带到指定应用包的Google Play商店.

如果仍有问题,请检查您的意图过滤器优先级.http://developer.android.com/guide/topics/manifest/intent-filter-element.html


归档时间:

查看次数:

36820 次

最近记录:

10 年,3 月 前