IntentFilter
7133 ワード
IntentFilterにはaction,category,dataの3つの要素が含まれています
一、Activity呼び出しモードは二つあります.
1、明示的な呼び出し:
パッケージ名とクラス名を含む、起動されたオブジェクトを明確に示すコンポーネント情報です.
例:パッケージ名で別のアプリケーションを開く
例:アプリケーションのActivityを開く
(この方法は、パケット名およびクラス名を含む、起動されたオブジェクトのコンポーネント情報を明確に指摘する必要があることを意味するため、厳密には表示呼び出しではない.ここではパケット名は示されていない.)
2、暗黙呼び出し:
InentFilterに対応するフィルタ情報を照合することで、起動する必要があるActivityを照合します.一致するActivityが複数ある場合は、どのActivityを起動するかをユーザーに選択させるリストが表示されます.
フィルタ条件はaction,category,dataの3つの要素です
ここで、actionとcategoryは併用され(categoryはactionの付属情報)、actionマッチングのみが成功し、categoryもマッチングに成功し、このActivityこそマッチングに成功する.の照合に成功しました: もマッチングに成功しました.Intentを作成するときにaddCategory()メソッドを呼び出さないため、intentのcategoryのデフォルトはandroid.intent.category.DEFAULT です. categoryマッチングのみではAActivityにマッチングできません.Categoryプロパティはアクションを実行するための追加情報です.だからcategoryだけでは一致しません.次のコード のように data 単独使用
dataプロパティには、android:scheme、android:host、android:port、android:path、android:mimeTypeのいくつかのセクションがあります.data要素からなるURIモデルは以下の通りである.scheme://host:port/path
ここでhostとportはURIのauthorityであり、hostが指定されていない場合、portは無視されます
dataの各属性は独立ではなく,dataの各属性はURIの全構成部分を構成している.authority(hostとport)を有意義にするにはschemeを指定する必要があります.pathを有意義にするにはschemeとauthority(hostとport)を有意義にしなければならない.
いくつかの例: scheme のみ一致 scheme host port のみ一致マッチングscheme host port path mineTypeマッチング:
mimeTypeを追加しました.setTypeとsetDataは使用できません.setDataAndType()を使用する必要があります.
setType()はURLをnullに設定します.setData()はmineTypeをnullに設定します
正しい一致方法:setDataAndType()
まとめ:
暗黙的にactivityを起動するには、Action(またはActionとcategory)を使用するか、dataを使用してフィルタリングするか(dataは逆制限Intentを行い、Activityを決定する方法).
1つのActivityのintent-filterには、複数のaction、複数のcategory、複数のdataがあり、これにより、複数の組合せがIntentと一致することができる.注意:1つのActivityに複数のIntentが一致している場合は、複数のintent-filterを使用してIntentと一致することをお勧めします.
よく使うアクションとCategoryの意味
action: ACTION_MAIN:Androidアプリケーションのエントリです.各Androidアプリケーションには、このタイプのAction宣言が1つしか含まれていません. ACTION_VIEW:システムはデータの種類によって、登録された対応するアプリケーションを通じてデータを表示する. ACTION_DIAL:システムのデフォルトのダイヤルアッププログラムを開き、Dataに電話番号が設定されている場合、自動的にダイヤルアッププログラムにこの番号を入力します. ACTION_CALL:Dataに付いている番号を直接呼びます.
Category: CATEGORY_DEFAULT:Androidシステムでデフォルトの実行方式は、通常のActivityの実行方式で実行されます. CATEGORY_HOME:このコンポーネントをホームActivity(Launcherデスクトップ)に設定します. CATEGORY_LAUNCHERはデスクトップにアイコンを表示します. CATEGORY_BROWSABLE:このコンポーネントをブラウザで起動できるように設定します.
Data: tel://:番号データフォーマット、電話番号に続く. mailto://:メールデータフォーマット、メール受信者アドレス. smsto://:メールデータフォーマット、メール受信番号. smsto://:短息データフォーマット、メール受信番号. カスタムdata:
参照リンク:
https://www.jianshu.com/p/5f644e0fdba9 https://blog.csdn.net/weihan1314/article/details/7973511
一、Activity呼び出しモードは二つあります.
1、明示的な呼び出し:
パッケージ名とクラス名を含む、起動されたオブジェクトを明確に示すコンポーネント情報です.
例:パッケージ名で別のアプリケーションを開く
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_LAUNCHER);
ComponentName cn = new ComponentName("com.mg.axe.testappa","com.mg.axe.testappa.MainActivity");
intent.setComponent(cn);startActivity(intent);
。
例:アプリケーションのActivityを開く
Intent intent = new Intent(ActivityA.this,ActivityB.class);
startActivity(intent);
(この方法は、パケット名およびクラス名を含む、起動されたオブジェクトのコンポーネント情報を明確に指摘する必要があることを意味するため、厳密には表示呼び出しではない.ここではパケット名は示されていない.)
2、暗黙呼び出し:
InentFilterに対応するフィルタ情報を照合することで、起動する必要があるActivityを照合します.一致するActivityが複数ある場合は、どのActivityを起動するかをユーザーに選択させるリストが表示されます.
フィルタ条件はaction,category,dataの3つの要素です
Intent intent = new Intent();
intent.setAction("android.intent.action.View");
startActivity(intent);
ここで、actionとcategoryは併用され(categoryはactionの付属情報)、actionマッチングのみが成功し、categoryもマッチングに成功し、このActivityこそマッチングに成功する.
public void match(){
Intent intent = new Intent();
intent.addCategory("aaa.bb.cc");
intent.setAction("com.axe.mg.what");
startActivity(intent);
}
public void match(){
Intent intent = new Intent();
intent.setAction("com.axe.mg.what");
// Category android.intent.category.DEFAULT ,action 。
startActivity(intent);
}
// setAction()
public void match(){
Intent intent = new Intent();
intent.addCategory(Intent.CATEGORY_DEFAULT);
intent.addCategory("aaa.bb.cc");
startActivity(intent);
}
dataプロパティには、android:scheme、android:host、android:port、android:path、android:mimeTypeのいくつかのセクションがあります.data要素からなるURIモデルは以下の通りである.scheme://host:port/path
ここでhostとportはURIのauthorityであり、hostが指定されていない場合、portは無視されます
dataの各属性は独立ではなく,dataの各属性はURIの全構成部分を構成している.authority(hostとport)を有意義にするにはschemeを指定する必要があります.pathを有意義にするにはschemeとauthority(hostとport)を有意義にしなければならない.
Scheme:URI 。 URI Scheme. URI 。 content file。
Host:URI host。 www.axe.com。 scheme port,path , host , URI ; scheme, host ,URI 。 : URI :http://www.axe.com:500/profile/info prot path“:500/profile/info ” , URI 。 www.axe.com URI 。
Port:URI , URI scheme host port 。
path: , :http://example.com/blog/abc.html, path /blog/abc.html ;
pathPrefix: , Uri , pathPrefix /blog ;
pathPattern: 。
いくつかの例:
mimeTypeを追加しました.setTypeとsetDataは使用できません.setDataAndType()を使用する必要があります.
setType()はURLをnullに設定します.setData()はmineTypeをnullに設定します
public Intent setType(String type) {
mData = null;
mType = type;
return this;
}
public Intent setData(Uri data) {
mData = data;
mType = null;
return this;
}
正しい一致方法:setDataAndType()
public void match() {
Intent intent = new Intent();
//
intent.setDataAndType(Uri.parse("axe://www.axe.com:8888/mypath"),"axe/abc");
startActivity(intent);
}
まとめ:
暗黙的にactivityを起動するには、Action(またはActionとcategory)を使用するか、dataを使用してフィルタリングするか(dataは逆制限Intentを行い、Activityを決定する方法).
1つのActivityのintent-filterには、複数のaction、複数のcategory、複数のdataがあり、これにより、複数の組合せがIntentと一致することができる.注意:1つのActivityに複数のIntentが一致している場合は、複数のintent-filterを使用してIntentと一致することをお勧めします.
よく使うアクションとCategoryの意味
action:
Category:
Data:
参照リンク:
https://www.jianshu.com/p/5f644e0fdba9 https://blog.csdn.net/weihan1314/article/details/7973511