IntentFilter

7133 ワード

IntentFilterにはaction,category,dataの3つの要素が含まれています
一、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);
    }
    
    
  • もマッチングに成功しました.Intentを作成するときにaddCategory()メソッドを呼び出さないため、intentのcategoryのデフォルトはandroid.intent.category.DEFAULT
  • です.
    public void match(){
     Intent intent = new Intent();
     intent.setAction("com.axe.mg.what");
     //   Category    android.intent.category.DEFAULT    ,action     。
     startActivity(intent);
    }
    
    
  • categoryマッチングのみではAActivityにマッチングできません.Categoryプロパティはアクションを実行するための追加情報です.だからcategoryだけでは一致しません.次のコード
  • のように
    //  setAction()    
    public void match(){
     Intent intent = new Intent();
     intent.addCategory(Intent.CATEGORY_DEFAULT);
     intent.addCategory("aaa.bb.cc");
     startActivity(intent);
    }
    
    
  • 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: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:            。
    
    
    
    
    

    いくつかの例:
  • scheme
  • のみ一致
    
     
     
     
     
     
     
    
    
    
  • scheme host port
  • のみ一致
    
     
     
     
     
     
    
    
    
  • マッチングscheme host port path
  • 
     
     
     
     
     
    
    
    
  • mineTypeマッチング:
  • 
     
     
    
     
     
     
    
    
    

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