2013-05-16 9 views
9

Benötigen Sie weitere Informationen in Bezug auf Absicht-Filter-Tag in Manifest angegeben. Ich bin mir bewusst, dass wir Daten in zwei Formen angeben:Wie viele Schema & Host-Tags können unter Intent-Filter in Android-Manifest kommen

<intent-filter> 
    <data android:host="com.myHost" android:scheme="content"/> 
</intent-filter> 

UND:

<intent-filter> 
    <data android:scheme="content"/> 
    <data android:host="com.myHost"/> 
</intent-filter> 

Aber ich möchte wissen, können mehrere Kombinationen bestehen, wie

<intent-filter> 
     <data android:host="com.myHost" android:scheme="content"/> 
     <data android:scheme="content"/> 
     <data android:host="com.myHost1"/> 
</intent-filter> 

OR:

<intent-filter> 
     <data android:host="com.myHost" android:scheme="content"/> 
     <data android:scheme="content"/> 
     <data android:host="com.myHost1"/> 
     <data android:scheme="content"/> 
     <data android:host="com.myHost2"/> 
</intent-filter> 

Im letzten Fall möchte ich t o wissen, erstens, wenn das & existieren kann, wie wird entschieden, welcher Host für welches Schema verwendet werden soll, da die Datenvariablen, die das Schema & enthalten, in beliebiger Reihenfolge auftreten können.

Bitte helfen.

+1

Ihre Daten-Tags nur mit dem Host angegeben werden durch die Art und Weise vollständig ignoriert. Von den Google-Dokumenten unter http://developer.android.com/guide/components/intents-filters.html Jedes dieser Attribute ist optional in einem Element, aber es gibt lineare Abhängigkeiten: Wenn ein Schema nicht ist angegeben, wird der Host ignoriert. Wenn kein Host angegeben ist, wird der Port ignoriert. Wenn sowohl das Schema als auch der Host nicht angegeben sind, wird der Pfad ignoriert. – gleenn

Antwort

10

Ich bin mir bewusst, dass wir Daten in zwei Formen

Sie content nicht für ein Schema verwenden angeben können, es sei denn, Sie wirklich bedeuten, dass Sie eine Aktivität zur Unterstützung einer ContentProvider schaffen.

Aber ich möchte wissen, können mehrere Kombinationen

existieren Wenn Ihr Filter nur ein Attribut für <data> hat, können Sie auf jeden Fall unterschiedliche Werte haben, wie dies aus der Kontakte-App:

<activity 
     android:name=".activities.ShowOrCreateActivity" 
     android:theme="@android:style/Theme.Translucent.NoTitleBar"> 

     <intent-filter> 
      <action android:name="com.android.contacts.action.SHOW_OR_CREATE_CONTACT" /> 
      <category android:name="android.intent.category.DEFAULT" /> 
      <data android:scheme="mailto" /> 
      <data android:scheme="tel" /> 
     </intent-filter> 
    </activity> 

Auch eine Komponente kann mehrere <intent-filter> Elemente haben, von denen jedes logisch mit den anderen verknüpft ist (alle Intent, die mit irgendeinem Filter übereinstimmen, stimmen mit der Komponente überein). Also für komplexere Szenarien, wo Sie 2 + Attribute pro <data> Element haben, würde ich geneigt sein, diese in separaten <intent-filter> Elemente zu setzen.

, wie kommt es, dass entschieden die Gastgeber für die Regelung

Jedes Match gut gilt als verwendet werden. Sie würden die Intent selbst untersuchen, um mehr darüber zu erfahren, was es enthält.

+0

Vielen Dank! Im Idealfall, wenn eine App zwei Content & Host-Kombinationen angeben muss, sollte sie in zwei Intent-Filter eingefügt werden. – AndroidGuy

+1

Funktioniert nicht in allen Fällen, Android-Dokumente sagen: "Hinweis: Intent-Filter können nur ein einzelnes Datenelement für ein URI-Muster enthalten. Erstellen Sie separate Intent-Filter, um zusätzliche URI-Muster zu erfassen." – htafoya

2

Ergänzt um @CommonsWare Antwort scheint es, dass Sie nicht zwei <data> Tags verwenden können, wenn Sie nicht so spezifisch sind.

A) In einem meiner apps kann ich:

<data android:scheme="myAppScheme1"/> 

B) und

<data android:scheme="myAppScheme2" android:host="host2"/> 

C) Aber die Folgenden wird der erste Tag ignorieren (mit myAppScheme1://whatever URI wird nicht funktionieren):

<data android:scheme="myAppScheme1"/> 
<data android:scheme="myAppScheme2" android:host="host2"/> 

D) jedoch, wenn ich das erste Schema ergänzen es für beide URIS arbeiten:

<data android:scheme="myAppScheme1" android:host="host1"/> 
<data android:scheme="myAppScheme2" android:host="host2"/> 

Wahrscheinlich, wenn Sie den Fall C) wirklich brauchen, werden Sie besser schaffen zwei Intent-Filter