基礎学習総括(八)--Intentで意図と暗黙的意図を表示する使い方

19850 ワード

Intent(意図)は主にAndroidアプリケーションの各コンポーネント間の通信を解決することである.Intentはアプリケーションで1回の操作の動作、動作に関するデータ、付加データの記述を担当し、AndroidはこのIntentの記述に基づいて、対応するコンポーネントを見つけ、Intentを呼び出したコンポーネントに渡し、コンポーネントの呼び出しを完了する.そのため、Intentはここでメディア仲介の役割を果たし、コンポーネントが互いに呼び出す関連情報を専門に提供し、呼び出し者と被呼び出し者との間のデカップリングを実現している.例えば、1つの連絡先メンテナンスアプリケーションでは、対応するActivityがlistActivityであると仮定した連絡先リスト画面で、ある連絡先をクリックした後、対応するActivityがdetailActivityであると仮定した連絡先の詳細画面から飛び出したいと考えています.この目的を達成するために、listActivityはシステムに「表示」動作を指示するためにIntentを構築する必要があります.このアクションに対応する表示オブジェクトは「連絡先」であり、startActivity(Intent intent)を呼び出し、構築されたIntentを入力します.このIntentの説明に従って、ManiFestでこのIntentの要求を満たすActivityを見つけ、見つけたActivity、すなわちdetailActivityを呼び出し、最終的にIntentに伝わり、detailActivityはこのIntentの説明に従って、対応するアクションを実行します.intentの主な分類には主に暗黙的意図と明示的意図が含まれる.明示的な意図は、通常、主に本アプリケーションのActivity間のデータを起動するが、暗黙的な意図は、電話をかけたり、アプリケーションにまたがるActivityを起動したりするシステム内の特定の動作によく見られる.通常、明示的な意図:Intentを呼び出す.setComponent()またはIntent.setClass()メソッドは、コンポーネント名のIntentが明示的な意図であることを明確に指定し、明示的な意図は、Intentがどのコンポーネントに渡すべきかを明確に指定します.暗黙的意図:コンポーネント名が明確に指定されていないIntentは暗黙的意図です.Androidシステムは、暗黙的な意図で設定されたアクション、カテゴリ、データ(URI、データ型)に基づいて、この意図を処理します.表示意図は非常によく使われていて、非常に簡単です.一般的にアプリケーション内のActivityの相互呼び出し変換に使われていますが、ここでは暗黙的な意図を紹介します.簡単な要約は、Action(アクション)、Category(付加情報)、Data(データ、具体的な内容)、Tpye(タイプ)などです.例を挙げると、意図はコンポーネントを起動する完全な動作情報です.打てばアクション、人はDataコンテンツ、Typeはタイプ、どんな人を打てばいいですか?悪人を殴って、typeは悪い指のタイプで、これらの情報が全部になってこそ完全な意図を実行することができて、もちろんいくつかの情報があって、例えばschemeはURIタイプのデータの接頭辞で、この例の中のsms:、hostホスト名、pathパスなどがあります.ここでは、システムメールを呼び出す例を挙げ、暗黙的な意図でシステムメールを起動し、10086に情報を送信する例を示します.コードは次のとおりです.
 
 1 /** 

 2      *               

 3      *  

 4      *       :     :Action(  ),Category(    ),Data(  ,    ),Tpye(  )  ,    , 

 5      *                        

 6      * ,    ,   Action  ,   Data  , Type    ,     ?   ,type        

 7      * ,                    

 8      * ,        ,  scheme  URI        ,         sms:,  host   ,path    

 9      *  

10      * @param view 

11      */  

12     public void startOne(View view) {  

13         Intent intent = new Intent();  

14         intent.setAction("android.intent.action.SENDTO");//          

15         intent.addCategory("android.intent.category.DEFAULT");//       

16         intent.setData(Uri.parse("sms:10086"));//      ,   10086  

17         startActivity(intent);  

18     }  

 
 
上の例はシステムを呼び出すもので、下ではカスタムの暗黙的な意図がどのように呼び出されているかを見てみましょう.
まず、リストファイルに登録します.コードは次のとおりです.
 
 1 [html] view plaincopy CODE              

 2  

 3 <?xml version="1.0" encoding="utf-8"?>  

 4 <manifest xmlns:android="http://schemas.android.com/apk/res/android"  

 5     package="net.loonggg.intent"  

 6     android:versionCode="1"  

 7     android:versionName="1.0" >  

 8   

 9     <uses-sdk  

10         android:minSdkVersion="8"  

11         android:targetSdkVersion="17" />  

12   

13     <application  

14         android:allowBackup="true"  

15         android:icon="@drawable/ic_launcher"  

16         android:label="@string/app_name"  

17         android:theme="@style/AppTheme" >  

18         <activity  

19             android:name="net.loonggg.intent.MainActivity"  

20             android:label="@string/app_name" >  

21             <intent-filter>  

22                 <action android:name="android.intent.action.MAIN" />  

23   

24                 <category android:name="android.intent.category.LAUNCHER" />  

25             </intent-filter>  

26         </activity>  

27         <activity android:name="net.loonggg.intent.SecondActivity" >  

28             <intent-filter>  

29   

30                 <!--        -->  

31                 <action android:name="net.loonggg.xxx" />  

32                 <!--     scheme host -->  

33                 <data  

34                     android:host="www.baidu.com"  

35                     android:path="/person"  

36                     android:scheme="loonggg" />  

37                 <!--        -->  

38                 <data android:mimeType="person/people" />  

39                 <!--      -->  

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

41             </intent-filter>  

42         </activity>  

43     </application>  

44   

45 </manifest>  

 
2つ目のActivityの中のものは私たちがカスタマイズしたもので、下のコードです.
 
 1  

 2 <activity android:name="net.loonggg.intent.SecondActivity" >  

 3            <intent-filter>  

 4   

 5                <!--        -->  

 6                <action android:name="net.loonggg.xxx" />  

 7                <!--     scheme host -->  

 8                <data  

 9                    android:host="www.baidu.com"  

10                    android:path="/person"  

11                    android:scheme="loonggg" />  

12                <!--        -->  

13                <data android:mimeType="person/people" />  

14                <!--      -->  

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

16            </intent-filter>  

17        </activity>  

 
 
コードでカスタムを呼び出すにはどうすればいいですか?実はシステムのメールを呼び出すのと同じで、ただシステムのメールの中のあれらの動作とデータを呼び出すだけで、システムはすでに私达に配置して、私达は直接使えばいいので、カスタマイズしたのは私达が自分で書いたので、呼び出す方法とシステムは実は同じです.方法は次のとおりです.
 
 1 /** 

 2      *              

 3      *  

 4      * @param view 

 5      */  

 6     public void startTwo(View view) {  

 7         Intent intent = new Intent();  

 8         intent.setAction("net.loonggg.xxx");  

 9         intent.addCategory("android.intent.category.DEFAULT");  

10         intent.setDataAndType(Uri.parse("loonggg://www.baidu.com/person"),  

11                 "person/people");  

12         startActivity(intent);  

13     } 

   
特に注意したいのはsetData(data)とintent.settype(type)は、この2つの方法が互いにクリアされることに注意し、setData(data)を設定してからsettype(type)を設定すると、後に設定したsettype(type)が前のsetData(data)設定の内容をクリアし、エラーを報告するため、逆にタイプとデータを設定する場合はsetDataAndType(data,type)という方法を使用します.
 
参考出典:http://blog.csdn.net/loongggdroid/article/details/17887975
1.マルチページ作成1.1 android内蔵アシスタントを使用する:パッケージメール->New->Other->Android Activity 1.2クラスを作成する方法作成:クラスを作成し、extends Activityを継承してテンプレートsuperを作成します.onCreate(savedInstanceState);//クラスに対応するxmlテンプレートsetContentView(R.layout.activity_sms)をバインドします.プロファイルに属性を追加:
意図的にデータを渡す
//    

Intent data=new Intent();

//              

data.putExtra("smsInfo", smsInfo);

//        (   ,  )

setResult(1,data);

//  activity      onActivityResult(). 

finish();



//      

//         

protected void onActivityResult(int requestCode,int resultCode,Intent data){

if(data!=null){

//  String     

String Info = data.getStringExtra("smsInfo");

if(requestCode==0){

et_content.setText(Info);

}else if(requestCode==1){

et_phone.setText(Info);

}

}

super.onActivityResult(requestCode, resultCode, data);

}