我有一个我在Android应用程序中重写的网址。单击从电子邮件到该链接的链接会弹出Intent Chooser
对话框(“使用完成此操作”)。但是,点击Chrome中的相同链接(在<a>
标记中)(在Android 4上)会将我重定向到该网址,并且不会提供Intent Chooser
。
如果我将<a>
标记中的链接替换为Google Play商店的链接(https://play.google.com
),则点击该链接会再次弹出Intent Chooser
。
Google Play商店和Chrome是否有特别之处,或者我在配置网址时遇到了什么错误?我有什么办法可以用html来完成这项工作吗?
这是<intent-filter>
<activity
android:label="@string/app_name"
android:name="..."
>
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
<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:scheme="https"
android:host="www.example.com"
/>
<data android:scheme="http"
android:host="www.example.com"
/>
</intent-filter>
</activity>
(重定向到网址也不会弹出Intent Chooser
对话框,但我认为上面的情况更明确地表达了我的问题。)
另外值得注意的是,我很确定这一切都在我的域名崩溃时工作。一旦我的域名上线,这就停止了。这可能是我的想象力,因为我当时并不是100%专注于这个问题。
Chrome可能会特别对待Google Play商店网址,否则会在打开Intent Chooser
之前等待网址的非200响应?
答案 0 :(得分:2)
我对此进行了修改,可能更容易向您展示一种有效的方法。这适用于2.3.4的设备和4.2.2的设备,所以我认为它适用于大多数设备。
这是我在清单文件中的意图过滤器:
<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:scheme="http" android:host="realsimpleapps.com" android:pathPrefix="/acv/" />
</intent-filter>
这是我的html文件:
<a href="http://realsimpleapps.com/acv/aThing">Click Me!</a>
在我的主要活动中,我用它来抓住我所拥有的“aThing”(上图)设置为:
Uri data = getIntent().getData();
if (data != null) {
List<String> params = data.getPathSegments();
if (params != null) {
Log.d(tag, "Param 0: " + params.get(0));
}
}
使其工作,然后将第二个数据元素添加到intent过滤器。如果它之后仍然有效,你应该设置。
让我们知道它是怎么回事。
分贝
答案 1 :(得分:1)
很可能是一个真实/已知的错误。
我建议的那个(但现在已关闭,所以看起来对于你正在尝试的版本是固定的): https://code.google.com/p/chromium/issues/detail?id=113140
由@xbakesk发现/开放: https://code.google.com/p/chromium/issues/detail?id=170925 https://code.google.com/p/chromium/issues/detail?id=230104
如果发现任何其他错误,请在评论中告诉我,我会直接添加或修改我的回答。如果错误被关闭,我也会尝试更新答案。
答案 2 :(得分:0)
我不确定您是否可以向intent过滤器添加多个数据元素。我会为不同的方案使用两个不同的intent过滤器。
如果您可以控制网页上的网址,则可以将http更改为您自己的自定义协议,这样您的应用就会打开而不是通过网络浏览器提示。