2011-02-04 7 views
10

Tworzę agregator rss dla mojego telefonu z Androidem. Chciałbym móc subskrybować kanał RSS z przeglądarki, ponieważ większość stron internetowych ma przycisk subskrypcji za pomocą przycisku rss.Jak otworzyć aplikację dla systemu Android, gdy w przeglądarce jest otwarte łącze rss?

W jaki sposób mogę zbudować filtr intencyjny do odbioru tych linków?

Ta kwestia była podobna i pokazał jak stworzyć filtr zamiarem uchwyt linki przeglądarki: Make a link in the Android browser start up my app?

Jednak nie wiem jak zrobić to specyficzne dla kanałów RSS. jako próbę próbowałem filtr: I

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

jestem na dobrej drodze? Na co powinienem filtrować?

+1

odległości krótkiego przypomnienia: nie załóżmy, że ścieżkę można podać jako wyrażenie regularne tylko dlatego, że często widzisz ". *". Składnia jest bardzo ograniczona. Zobacz http://developer.android.com/guide/topics/manifest/data-element.html po kilka szczegółów na ten temat. – xmjx

Odpowiedz

7

Okazuje się, że istnieje wiele różnych sposobów, w jakie można skonfigurować podcasty, więc każdy filtr zamiarów będzie działał tylko dla niektórych z nich. Aby uzyskać pożądany efekt w większości linków subskrypcji, należy użyć wielu różnych filtrów.

Oto niektóre z filtrów Okazało się, że pracował:

<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

dlaczego aplikacja jest zamykana po uzyskaniu adresu URL strony internetowej za pomocą filtrów intencji? Chodzi mi o to, że w mojej aplikacji, gdy używam filtru intencyjnego do dodawania adresu URL strony, to jest on wyświetlany w widoku tekstowym, ale zostaje zamknięty i wraca do aplikacji przeglądarki, od której kliknąłem na link –

3

Czy jestem na dobrej drodze?

Tak. Jednakże:

  • Nie trzeba schemat
  • Ty brakuje android: prefiks przed scheme Zresztą
  • type powinny być android:mimeType

Here is a sample application który pokazuje m.in. , odpowiadając na linki w plikach PDF.

+0

Wprowadziłem poprawki, ale nadal nie mogę dostać mojej aplikacji, by odpowiedzieć na linki – CodeFusionMobile

1

Czy to możliwe, że serwer nie wysyła właściwego typu MIME?

Eksperyment dodając:

<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: To trochę skomplikowane, aby skomponować odpowiedni zestaw intent-filtrów, istnieje wiele wczesnych powrotów w algorytmie dopasowywania:
https://android.googlesource.com/platform/frameworks/base/+/master/core/java/android/content/IntentFilter.java

W twoim przypadku typ MIME musi dokładnie odpowiadać "application/rss + xml", czy twoje źródła zwracają ten typ MIME w nagłówku wiadomości?

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

Spróbuj:

  1. Bądź szerszych filtry
  2. Dodaj wiele filtrów.
+0

To też nie działa. Poza tym większość kanałów nie używa obecnie rozszerzenia .rss lub .xml, po prostu używają domyślnego adresu URL, czasem nawet strony php. – CodeFusionMobile

+0

Używają typów MIME, zamieniają linie danych na:

19

Te 3 filtry wydają się być te stosowane przez GoogleListen i Czytnik Google 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

To zaoszczędziło mi godzinę próbowania. Dałoby +10 jeśli to możliwe. Z czystej ciekawości: jak dowiedziałeś się, które filtry używają Google Listen i Google Reader? – sven

Powiązane problemy