AndroidのIntent分析

6099 ワード

一、Intentの概要androidのIntentは目的であり、意図的な意味であり、androidが提供するアプリケーション間の相互作用と通信を支援するメカニズムである.intentはアプリケーション間だけでなく、アプリケーション内部間のActivity/serviceのインタラクションにも適用でき、Intentの使用では関数の呼び出しは表示されません.関数の呼び出しよりもIntentの方が抽象的で、Intentを呼び出す基本要素はActivity/Serviceです.
二、Intentの基本的な使い方AndroidにはIntentに関するものとしてAction/CategoryやIntentFilterなど、放送用のIntentがありますが、以下ではIntentの2つの基本的な使い方を説明します.表示されるIntentは、Intentオブジェクトを構築すると受信者を指定します.2.ステルスのIntent、すなわちIntentの送信者は、Intentオブジェクトを構築する際に、受信者が誰であるかを知らず、関心も持たない.(1)表示するIntent 1.同じアプリケーション間のActivityの切り替えは、通常、1つのアプリケーションで複数のUI画面が必要であり、複数のActivityクラスが必要であり、これらのActivity間で切り替えが行われる.この切り替えは、Intentメカニズムによって実現される、同じアプリケーションでActivityを切り替えるときに、起動するActivityが具体的にどれであるかを知ることが多い.したがって、明示的なIntentで実装されることがよくあります.次の例は、2つのUI画面、すなわち2つのActivityであるSimpleIntentTestクラスとTestActivityクラスを含む非常に簡単なアプリケーションSimpleIntentTestを実現するために使用され、SimpleIntentTestクラスにはTestActivityを起動するためのボタンがあります.プログラムのコードは非常に簡単で、SimpleIntentTestクラスのソースコードは以下の通りです.
public   class  SimpleIntentTest  extends  Activity  implements  View.OnClickListener{

     @Override

     public   void  onCreate(Bundle savedInstanceState) {

         super .onCreate(savedInstanceState);

        setContentView(R.layout. main );

        Button startBtn = (Button)findViewById(R.id. start_activity );

        startBtn.setOnClickListener( this );

    }
     public   void  onClick(View v) {

         switch  (v.getId()) {

         case  R.id. start_activity :

            Intent intent =  new  Intent( this , TestActivity. class );

            startActivity(intent);

             break ;

         default :

             break ;

         }

    }   

}

Intent intent = new Intent( this , TestActivity. class ); startActivity(intent); ここでIntentオブジェクトを定義する際に使用されるのは、Intentのコンストラクション関数の1つです.Intent(Context packageContext,Class)
< activity   android:name = ".TestActivity" />

2.異なるアプリケーション間のActivityの切り替え
Intent intent =  new  Intent();
intent.setClassName( "com.tope.samples.intent.simple" , 
         "com.tope.samples.intent.simple.TestActivity" );
startActivity(intent);

(2).暗黙的Intent(Implicit Intent)は、Intentメカニズムが上記の明示的なIntentの使い方を提供するだけであれば、このような比較的複雑なメカニズムの意味は大きくないようだ.確かに、Intentメカニズムのより重要な役割は、Intentの送信者が受信者を指定することなく、受信者が誰であるかを知らず、Androidフレームワークによって最も一致する受信者1を探すことにある.最も簡単な暗黙的なIntentでは、Androidが持つ電話機能を起動するためのDialerプログラムを定義します.
public   class  ImplicitIntentTest  extends  Activity     

     implements  View.OnClickListener{

     /**   Called   when   the   activity   is   first   created.   */

     @Override

     public   void  onCreate(Bundle savedInstanceState) {

         super .onCreate(savedInstanceState);

        setContentView(R.layout. main );

        Button startBtn = (Button)findViewById(R.id. dial );

        startBtn.setOnClickListener( this );

    }
     public   void  onClick(View v) {

         switch  (v.getId()) {

         case  R.id. dial :

            Intent intent =  new  Intent(Intent. ACTION_DIAL );

            startActivity(intent);

             break ;

         default :

             break ;

        }

    }   

}

Intentを表示する方式とは異なり、この方式は受信者を指定し、Intentを初期化する際にはIntentのみが入る.ACTION_DIALパラメータ、どの受信者をサポートするかは表示されません.2.受信者を追加受信者が何らかのIntentを受信することを望む場合はAndroid Mainfestが必要である.xmlにActivityの宣言を追加し、対応するIntentFilter、Actionを設定します.
< activity   android:name = ".TestActivity" >

         < intent-filter >

             < action   android:name = "android.intent.action.DEFAULT"   />

             < action   android:name = "android.intent.action.DIAL"   />

             < category   android:name = "android.intent.category.DEFAULT"  />

          intent-filter >

      activity >

Intent FilterおよびAction、Categoryなどの概念--Intent送信者はActionを設定して行う動作を説明するが、Intentの受信者はAndroid Manifestにある.xmlファイルでは、Intent Filterを設定することで、自分が受信できるIntentを宣言します.