2

我看过这么多“这就是你如何做意图”的问题,我必须遗漏一些明显的东西。

我有一个程序应该在您浏览时监视和拦截特定链接。当我生成测试意图并使用 queryIntentActivities 检查分辨率时,它匹配。但是,当我浏览到带有此链接的页面并点击它时,浏览器会愉快地继续跟踪该链接,而不是给出预期的弹出窗口。

测试意图的代码:

private Intent makeTestIntent() {
    Intent testIntent = new Intent(Intent.ACTION_VIEW,Uri.parse("http://my.machine.com/WebAppName/connect.link"));
    testIntent.setFlags(Intent.FLAG_DEBUG_LOG_RESOLUTION);
    return testIntent;
}
public boolean testHomeIntent() {
    Intent testIntent = makeTestIntent();
    List<ResolveInfo> resolution = getPackageManager().queryIntentActivities(testIntent, PackageManager.MATCH_DEFAULT_ONLY);
// I test by adding a breakpoint here and looking at the resolution list.  The return value is irrelevant.
    return true;
}

当我运行它时,解析列表包含三个条目:我的活动、股票浏览器和 Firefox,它们的优先级均为 0,并且 isDefault 为 false。但是,正如我所说,当我访问具有相同链接的网页时,我的活动不会出现。它只是继续浏览。

清单的相关部分:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.my.package.name"
android:versionCode="1"
android:versionName="1.0" >


<uses-sdk android:minSdkVersion="8" />

<supports-screens android:smallScreens="true" 
              android:normalScreens="true"
              android:largeScreens="true"
              android:anyDensity="true" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<application
    android:icon="@drawable/icon"
    android:label="@string/app_label" >
    ... other activities removed for brevity
    <activity
        android:name="com.my.package.name.ConnectActivity"
        android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
        android:label="@string/set_link_name">
        <intent-filter>
            <data android:scheme="http"
                  android:host="my.machine.name"
                  android:path="/WebAppName/connect.link" />
            <action android:name="android.intent.action.VIEW" />
            <category android:name="android.intent.category.BROWSABLE" />   
            <category android:name="android.intent.category.DEFAULT" /> 
        </intent-filter>
    </activity>
</application>

希望我在删除应用程序名称特定部分时没有引入太多错别字。我还检查了默认情况下没有任何应用程序已设置为获取此意图。无论如何,这应该出现在测试解析器中,对吧?

请注意,我在这里没有使用 webview - 我希望用户能够拥有自己的浏览器。

4

1 回答 1

0

答案是“卸载 Firefox”。或者至少停止使用它。

此时,Firefox 将保留在浏览器中而不是提供其他选项。

https://bugzilla.mozilla.org/show_bug.cgi?id=653833 - 它被标记为已修复,但请查看评论 36 和 37。

当我从 Firefox 切换回本机浏览器时,它的行为符合我的预期。

于 2013-05-03T18:35:52.747 回答