我看过这么多“这就是你如何做意图”的问题,我必须遗漏一些明显的东西。
我有一个程序应该在您浏览时监视和拦截特定链接。当我生成测试意图并使用 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 - 我希望用户能够拥有自己的浏览器。