2011-07-18 29 views
7

意图过滤我想注册我的Android应用程序为iCal的URL的处理程序。为此,我在我的清单中为webcal://伪协议和HTTP URL使用text/calendar MIME类型设置了意向过滤器(请参见下文)。为iCal的网址

这在模拟器中工作完全正常,但在真实设备上我有问题。该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的错误吗?

+0

是否有可能服务器没有准确地发送沿着正确的内容类型?如果不是,浏览器可能会将其解释为纯文本。您也可以使用路径意图过滤器运行正则表达式* .ical –

+0

是的,服务器发送正确的MIME类型。以下是我用于测试的URL:http://re-publica.de/11/rp2011.ics –

+0

您是否尝试过使用* .ics路径参数方法的另一个过滤器?如果这不起作用,您可能会将默认应用程序设置为浏览器,以便它不再提示? –

回答

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> 
+0

没有。没有不同。即使使用* .ics pathPattern和规则完全按照您的规定,浏览器仍会继续显示数据,而不是将URL传递给我的应用程序。 –

+1

我相信你正在寻找的表达式是:看到文档的更多信息“*集成电路。”:http://developer.android.com/guide/topics/manifest/data-element.html – TheIT

+0

@TheIT好斑!这是一个古老的帖子,但我希望有人认为它有用。我会更新答案。它应该不是'。* \ ics'逃脱他的第二个时期吗? – Merlin