从Android中的链接问题启动应用

时间:2013-11-18 22:19:33

标签: java android

假设我在AndroidManifest.xml文件的活动中有一个带有以下intent过滤器的应用程序:

       <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="blabla.com"
                android:pathPrefix="/element/"
                android:scheme="http" />
        </intent-filter>

当然,它会导致我的应用程序从浏览器启动,例如。但是,当用户单击该链接时,系统会要求您选择用于打开该链接的应用程序。如果他/她选择浏览器而不是我的应用程序,此外,他/她检查“不要再问我”复选框,我的应用程序将永远不会启动!

  1. 有什么办法可以避免吗?
  2. 我可以使用另一种URI来独特地打开我的应用吗?我一直在寻找StackOverflow中的答案,但我没有找到任何一个不可浏览的URI的例子,用于从链接启动我的应用程序。
  3. 非常感谢你,

2 个答案:

答案 0 :(得分:1)

使用带元素的元素。例如,要处理twitter.com的所有链接,您可以将其放入AndroidManifest.xml中:

<intent-filter>
<data android:scheme="http" android:host="twitter.com"/>
<action android:name="android.intent.action.VIEW" />
</intent-filter>

然后,当用户在浏览器中点击Twitter链接时,系统会询问他们使用哪个应用程序来完成操作:浏览器或您的应用程序。

当然,如果您想在您的网站和应用之间提供紧密集成,您可以定义自己的方案:

<intent-filter>
<data android:scheme="my.special.scheme" />
<action android:name="android.intent.action.VIEW" />
 </intent-filter>

然后,在您的网络应用中,您可以添加以下链接:

<a href="my.special.scheme://other/parameters/here">
And when the user clicks it, your app will be launched automatically (because it will probably be the only one that can handle my.special.scheme:// type of uris). The only downside to this is that if the user doesn't have the app installed, they'll get a nasty error. And I'm not sure there's any way to check.

答案 1 :(得分:0)

  1. 使用自定义方案而不是http。也许,x-myapp

        <data
            android:host="blabla.com"
            android:pathPrefix="/element/"
            android:scheme="x-myapp" />
    
  2. 让您的blabla.com网络服务器响应http链接(http://blabla.com/element/foo)并重定向到x-myapp://blabla.com/element/foo,用于移动Android设备.....或者在页面上放置一个链接,该链接将包含x-myapp://链接以供用户点击

  3. 现在,由于您的应用是唯一响应x-myapp://blabla.com/element/链接的应用,因此您已避免执行第1步。