用于网址的意图过滤器

时间:2011-07-18 19:12:42

标签: android android-manifest android-intent

我正在尝试将我的Android应用注册为iCal网址的处理程序。为此,我在我的Manifest中为webcal://伪协议和使用text/calendar MIME类型的HTTP URL设置了intent过滤器(见下文)。

这在模拟器中运行得很好,但在真实设备上我遇到了问题。 webcal://过滤器有效,但text/calendar过滤器不起作用。相反,浏览器将ical文件显示为纯文本,而不是将URL传递给我的应用程序。

我检查过浏览器未配置为ical的默认处理程序(在“设置” - >“应用程序” - >“浏览器”中),我向其他一些人询问是否可以在手机上重现问题。都具有相同的结果。

注册文字/日历网址的正确方法是什么?

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
  package="org.splitbrain.giraffe"
  android:versionName="0.31" android:versionCode="4">
<uses-sdk android:minSdkVersion="4" />
<uses-permission android:name="android.permission.INTERNET"></uses-permission>

<application android:icon="@drawable/icon" android:label="@string/app_name" android:theme="@android:style/Theme.Light.NoTitleBar">
    <activity android:label="@string/app_name" android:name="MainActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
        <intent-filter>
            <category android:name="android.intent.category.BROWSABLE"></category>
            <action android:name="android.intent.action.VIEW"></action>
            <data android:mimeType="text/calendar" android:scheme="http"></data>
            <category android:name="android.intent.category.DEFAULT"></category>
        </intent-filter>
        <intent-filter>
            <category android:name="android.intent.category.BROWSABLE"></category>
            <action android:name="android.intent.action.VIEW"></action>
            <data android:scheme="webcal"></data>
            <category android:name="android.intent.category.DEFAULT"></category>
        </intent-filter>
    </activity>
    <activity android:name="OptionsActivity"></activity>
    <activity android:name="DetailActivity"></activity>
    <activity android:name="AboutActivity"></activity>

</application>
</manifest>

更新:在Android 1.6模拟器中,上述工作正常,但在2.3.3模拟器上却没有,因为它在手机上显示的行为相同。这可能是Android中的一个错误吗?

2 个答案:

答案 0 :(得分:0)

只需使用DEFAULT类别,BROWSABLE类别 可能会导致问题。

添加.*.ics路径模式以捕获服务器给出错误mime类型的所有文件

将所有匹配的数据放入同一个过滤器

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
  package="org.splitbrain.giraffe"
  android:versionName="0.31" android:versionCode="4">
<uses-sdk android:minSdkVersion="4" />
<uses-permission android:name="android.permission.INTERNET"></uses-permission>

<application android:icon="@drawable/icon" android:label="@string/app_name" android:theme="@android:style/Theme.Light.NoTitleBar">
    <activity android:label="@string/app_name" android:name="MainActivity">
        <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" />
            <data android:mimeType="text/calendar" />
            <data android:scheme="webcal" />
            <data android:pathPattern=".*.ics" />
        </intent-filter>
    </activity>
    <activity android:name="OptionsActivity"></activity>
    <activity android:name="DetailActivity"></activity>
    <activity android:name="AboutActivity"></activity>

</application>
</manifest>

答案 1 :(得分:0)