2011-07-18 50 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