2011-02-04 26 views
10

私はAndroid携帯用のrssアグリゲータを作成しています。ほとんどのウェブサイトにrssボタンで購読しているので、ブラウザからRSSフィードを購読することができます。ブラウザでrssリンクを開いたときにAndroidアプリを開くにはどうすればいいですか?

これらのリンクを受け取るインテントフィルタを作成するにはどうすればよいですか?

この質問は類似しており、ブラウザのリンクを処理するためにインテントフィルタを作成する方法を示しました: Make a link in the Android browser start up my app?

しかし、私は、RSSフィードにそれが特定の作り方を知りません。右のトラックに

 <intent-filter> 
      <action android:name="android.intent.action.VIEW" /> 
      <data android:mimeType="application/rss+xml" /> 
      <category android:name="android.intent.category.DEFAULT" /> 
      <category android:name="android.intent.category.BROWSABLE" /> 
     </intent-filter> 

アムI:私はこのフィルタを試してみました試みとして ?何をフィルタリングする必要がありますか?

+1

だけ短いリマインダー:ありません"。*"が頻繁に表示されるため、パスを正規表現として与えることができます。構文は非常に限定されています。それに関するいくつかの詳細については、http://developer.android.com/guide/topics/manifest/data-element.htmlを参照してください。 – xmjx

答えて

7

ポッドキャストを設定できる方法はたくさんあります。そのため、各インテントフィルタはいくつかのインテントフィルタでのみ動作します。多くの異なるフィルタを使用して、ほとんどの購読リンクに対して望ましい効果を得る必要があります。ここで

は、私はそれが働いたフィルタの一部です:

<intent-filter> 
       <action android:name="android.intent.action.VIEW" /> 
       <category android:name="android.intent.category.BROWSABLE" /> 
       <category android:name="android.intent.category.DEFAULT" /> 
       <data android:scheme="itpc" /> 
       <data android:scheme="pcast" /> 
       <data android:scheme="feed" /> 
       <data android:scheme="rss" /> 
      </intent-filter> 

      <intent-filter> 
       <action android:name="android.intent.action.VIEW" /> 
       <category android:name="android.intent.category.DEFAULT" /> 
       <category android:name="android.intent.category.BROWSABLE" /> 
       <data android:scheme="http" android:host="*" 
        android:pathPattern=".*xml" /> 
       <data android:scheme="http" android:host="*" 
        android:pathPattern=".*rss" /> 
       <data android:scheme="http" android:host="*" 
        android:pathPattern=".*feed.*" /> 
       <data android:scheme="http" android:host="*" 
        android:pathPattern=".*podcast.*" /> 
       <data android:scheme="http" android:host="*" 
        android:pathPattern=".*Podcast.*" /> 
       <data android:scheme="http" android:host="*" 
        android:pathPattern=".*rss.*" /> 
       <data android:scheme="http" android:host="*" 
        android:pathPattern=".*RSS.*" /> 
      </intent-filter> 

      <intent-filter> 
       <action android:name="android.intent.action.VIEW" /> 
       <category android:name="android.intent.category.DEFAULT" /> 
       <category android:name="android.intent.category.BROWSABLE" /> 
       <data android:mimeType="text/xml" android:scheme="http" /> 
       <data android:mimeType="application/rss+xml" android:scheme="http" /> 
       <data android:mimeType="application/atom+xml" android:scheme="http" /> 
      </intent-filter> 
+0

URLを取得した後、インテントフィルタを通したウェブサイトの私のアプリでは、私は意図のフィルタを使用してWebサイトのURLを取得すると、テキストビューで表示されますが、私はリンクをクリックした場所からブラウザのアプリケーションに閉じて戻ってきます –

3

正しい軌道に乗っていますか?

はい。しかし:

  • は、あなたが他のものの間で、実証android:mimeType

Here is a sample applicationでなければなりませんとにかく

  • typeschemeの前でandroid:接頭辞が欠けているスキーム
  • を必要としません。 、PDFファイルのリンクに応答します。

  • +0

    私は訂正をしましたが、私はまだアプリケーションにリンク – CodeFusionMobile

    1

    サーバーが適切なMIMEタイプを送信しないことはありますか?

    <intent-filter> 
        <action android:name="android.intent.action.VIEW" /> 
        <category android:name="android.intent.category.BROWSABLE" /> 
        <category android:name="android.intent.category.DEFAULT" /> 
        <data android:scheme="http" /> 
        <data android:host="*" /> 
        <data android:pathPattern=".*\\.rss" /> 
        <data android:pathPattern=".*\\.xml" /> 
        </intent-filter> 
    

    編集: それが早期リターンの多くはマッチングアルゴリズムであります、インテントフィルタの右のセットを構成するために少しトリッキーです:
    https://android.googlesource.com/platform/frameworks/base/+/master/core/java/android/content/IntentFilter.java

    を追加することにより、

    実験あなたの場合、mimetypeは 'application/rss + xml'と正確に一致しなければなりません。あなたのソースはメッセージヘッダのmimetypeを返しますか?

    URL url = new URL("http://www.engadget.com/rss.xml"); 
        URLConnection conn = url.openConnection(); 
        System.out.println("Content-Type:"+conn.getHeaderField("Content-Type")); 
    

    に試してみてください:広いフィルタ

  • は、複数のフィルタを追加してください

  • +0

    に応答することができませんそれはどちらも動作しません。また、ほとんどのフィードは.rssや.xml拡張子を使用していません。デフォルトのURL、場合によってはPHPページを使用しています。 – CodeFusionMobile

    +0

    彼らはMIMEタイプを使用して、データラインを次のように置き換えます:

    19

    これら3つのフィルタはGoogleListenやGoogleリーダーアプリをで使用されるもののように見える:

    <intent-filter> 
        <action android:name="android.intent.action.VIEW"/> 
        <category android:name="android.intent.category.DEFAULT"/> 
        <category android:name="android.intent.category.BROWSABLE"/> 
        <data android:scheme="http"/> 
        <data android:host="*"/> 
        <data android:pathPattern=".*\\.xml"/> 
        <data android:pathPattern=".*\\.rss"/> 
    </intent-filter> 
    
    <intent-filter> 
        <action android:name="android.intent.action.VIEW"/> 
        <category android:name="android.intent.category.DEFAULT"/> 
        <category android:name="android.intent.category.BROWSABLE"/> 
        <data android:scheme="http"/> 
        <data android:host="feeds.feedburner.com"/> 
        <data android:host="feedproxy.google.com"/> 
        <data android:host="feeds2.feedburner.com"/> 
        <data android:host="feedsproxy.google.com"/> 
    </intent-filter> 
    
    <intent-filter> 
        <action android:name="android.intent.action.VIEW"/> 
        <category android:name="android.intent.category.DEFAULT"/> 
        <category android:name="android.intent.category.BROWSABLE"/> 
        <data android:scheme="http"/> 
        <data android:mimeType="text/xml"/> 
        <data android:mimeType="application/rss+xml"/> 
        <data android:mimeType="application/atom+xml"/> 
        <data android:mimeType="application/xml"/> 
    </intent-filter> 
    
    +0

    これは、可能であれば+10を与えます。好奇心から逃れて:Google ListenとGoogle Readerのどのフィルタを使っていたのですか? – sven

    関連する問題