How to open my Android app when rss link is opened in browser?

前端 未结 4 1772
甜味超标
甜味超标 2020-12-25 08:17

I\'m creating an rss aggregator for my Android phone. I\'d like to be able to subscribe to an rss feed from the browser since most websites have a subscribe via rss button.

相关标签:
4条回答
  • 2020-12-25 08:53

    These 3 filters seem to be the ones used by GoogleListen and GoogleReader apps:

    <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 讨论(0)
  • 2020-12-25 09:01

    Am I on the right track?

    Yes. However:

    • You don't need the scheme
    • You are missing the android: prefix in front of scheme, anyway
    • type should be android:mimeType

    Here is a sample application that demonstrates, among other things, responding to links on PDF files.

    0 讨论(0)
  • 2020-12-25 09:04

    Could it be that the server doesn't send the right mimetype?

    Experiment by adding:

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

    Edit: It's a bit tricky to compose the right set of intent-filters, there's a lot of early returns in the matching algorithm:
    https://android.googlesource.com/platform/frameworks/base/+/master/core/java/android/content/IntentFilter.java

    In your case, the mimetype must match exactly which is 'application/rss+xml' do your sources return that mimetype in the message header?

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

    Try to:

    1. Make broader filters
    2. Add multiple filters.
    0 讨论(0)
  • 2020-12-25 09:05

    Turns out there's a lot of different ways podcasts can be set up so each intent filter will only work for some of them. A lot of different filters need to be used to get the desired effect over most subscribe links.

    Here's some of the filters I found that worked:

    <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 讨论(0)
提交回复
热议问题