Android实验五-组件通信2
5.2、Intent對象
????????Intent是一種輕量級消息傳遞機制,旨在解決各項組件之間的通信問題。它描述了應用中一次操作的動作、動作涉及數據、附加數據,Android則根據此描述,負責找到對應的組件,將 Intent傳遞給調用的組件,并完成該組件的調用。Intent啟動Activity分為顯示啟動和隱式啟動兩種:
1.顯示啟動
1)創建Intent對象,并初始化指明要啟動的Activity
方法一: Intent ?intent=new ?Intent(A.this,B.class);
方法二: ComponentName component=new ComponentName(A.this,B.class);
????????????????Intent ?intent=new ?Intent();
????????????????Intent.setComponent(component);
2)調用startActivity(intent)完成啟動Activity的啟動。
2.隱式啟動
所謂隱式啟動,表示不需指明要啟動哪一個Activity,由系統來決定。隱式啟動Activity時,系統會自動匹配。
1)創建Intent對象
Intent ?intent=new ?Intent();
2)設置用于匹配的Intent屬性
Intent.setAction(); ?//設置動作屬性
Intent.addCategory(); ?//設置類別屬性
Intent.setData(); ?//設置Date屬性
Intent.setType(); ?/ /設置對應的mimiType屬性
3)調用startActivity(intent)完成啟動Activity的啟動。
3.部署文件AndroidManifest.xml文件中的Intent Filter
Android系統的這種匹配機制是依靠過濾器Filter來實現。與Intent屬性保持一致,Intent Filter包含動作、類別、數據等過濾內容。
對應Intent的動作、類別、數據三個屬性,一個過濾器也有<action>,<catrgory>,<data>三個節點。
?(1)Action屬性:通過Intent自定義動作字符串來隱式啟動某個Activity,該字符串必須唯一。一個Intent對象最多只能設置一個Action屬性,Action要完成的動作可以自定義,也可以指定系統提供的Action。例如:
String COM_SUDA=”com.mialab.demo.SUDA_ACTION”; Intent intent=new Intent(); Intent.setAction(COM_SUDA);Action常量
| Action常量 | 對應字符串 | 描述 |
| ACTION_MAIN | Android.intent.action.MAIN | 應用程序的入口 |
| ACTION_VIEW | Android.intent.action.VIEW | 顯示指定數據 |
| ACTION_EDIT | Android.intent.action. EDIT | 編輯指定數據 |
| ACTION_GET_CONTENT | Android.intent.action. GET_CONTENT | 用戶選擇數據,并返回所選數據 |
| ACTION_DIAT | Android.intent.action.DIAT | 顯示撥號面板 |
| ACTION_CALL | Android.intent.action. CALL | 直接向指定用戶撥打電話 |
| ACTION_SEND | Android.intent.action.SEND | 向其他人發送數據 |
| ACTION_SEND_TO | Android.intent.action.SEND_TO | 向其他人發送信息 |
| ACTION_SEND_ANSWER | Android.intent.action. ANSWER | 應答電話 |
(2)Category屬性:被執行動作的附加屬性,一個Intent對象可以設置多個Category屬性,通過調用addCategory()方法來添加Category屬性。
(3)Data屬性:用來向Action提供操作的數據,例如:
Intent intent=new Intent();intent.setData(Uri.parse(“content://com.mialav.demo/data”));intent.setType(“abc/xyz”);后面的屬性setType屬性會覆蓋前面的setData屬性。如果希望擁有兩個屬性,可以調用 setDataAndType()方法,如:
Intent intent=new Intent(); intent. setDataAndType(Uri.parse(“content://com.mialav.demo/data”, “abc/xyz”);舉例:發送并返回短信內容
本示例主要實現輸入電話號碼,點擊“發送消息”,將啟動手機中的短信應用程序。當發送完短信退出后,界面將顯示發送的內容和時間。
MainActivity.java中的代碼如下:
package com.example.intentdemo3;import java.text.SimpleDateFormat; import java.util.Date; import android.net.Uri; import android.os.Bundle; import android.app.Activity; import android.content.Intent; import android.database.Cursor; import android.view.Menu; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; import android.widget.Toast; public class MainActivity extends Activity {final int PICK_CODE=0; @Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);Button btn=(Button)findViewById(R.id.btnsend);final EditText txttel=(EditText)findViewById(R.id.txttel); btn.setOnClickListener(new OnClickListener() { @Overridepublic void onClick(View arg0) {Intent intent=new Intent();intent.setAction(Intent.ACTION_SENDTO);String phone=txttel.getText().toString();intent.setData(Uri.parse("smsto:"+phone));startActivityForResult(intent, PICK_CODE); }});}@Overridepublic void onActivityResult(int requestCode, int resultCode, Intent data){super.onActivityResult(requestCode, resultCode, data);final EditText txttel=(EditText)findViewById(R.id.txttel);final EditText txtmsg=(EditText)findViewById(R.id.txtmsg); final EditText txtdate=(EditText)findViewById(R.id.txtdate); if(requestCode==PICK_CODE&&resultCode==Activity.RESULT_CANCELED){Uri uri = Uri.parse("content://sms/sent"); String[] projection = new String[] { "_id", "address", "person", "body","date", "type" };Cursor cur = getContentResolver().query(uri, projection, null, null, "date desc");StringBuilder smsmsg = new StringBuilder(); if(cur.moveToFirst()) { int idx_addr = cur.getColumnIndex("address"); int idx_body = cur.getColumnIndex("body"); int idx_date = cur.getColumnIndex("date"); do {String strAddress = cur.getString(idx_addr); if(strAddress.equals(txttel.getText().toString())){ String strbody = cur.getString(idx_body); long date = cur.getLong(idx_date);SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); Date d = new Date(date); txtmsg.setText(strbody);txtdate.setText(format.format(d));break;} } while (cur.moveToNext()); if (!cur.isClosed()) { cur.close(); cur = null; } } }}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.main, menu);return true;} }ActivityMain.xml中的代碼如下:
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="fill_parent"android:layout_height="fill_parent"android:padding="5dip" ><TableRowandroid:layout_width="wrap_content"android:layout_height="wrap_content" ><TextViewandroid:layout_width="match_parent"android:layout_height="wrap_content"android:text="SentTo:" /><EditTextandroid:id="@+id/txttel"android:layout_width="match_parent"android:layout_height="wrap_content"android:ems="10"android:inputType="phone" /></TableRow><Buttonandroid:id="@+id/btnsend"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="發送消息" /><TableRowandroid:layout_width="wrap_content"android:layout_height="wrap_content" ><TextViewandroid:layout_width="match_parent"android:layout_height="wrap_content"android:text="Message:" /><EditTextandroid:id="@+id/txtmsg"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="" /></TableRow><TableRowandroid:layout_width="wrap_content"android:layout_height="wrap_content" ><TextViewandroid:layout_width="match_parent"android:layout_height="wrap_content"android:text="Date:" /><EditTextandroid:id="@+id/txtdate"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="" /></TableRow></TableLayout>3、部署文件AndroidManifest.xml文件中的代碼如下:
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.mialab.sendmsg"android:versionCode="1"android:versionName="1.0" ><uses-sdkandroid:minSdkVersion="14"android:targetSdkVersion="19" /><uses-permission android:name="android.permission.READ_SMS"></uses-permission> <applicationandroid:allowBackup="true"android:icon="@drawable/icon"android:label="@string/app_name"android:theme="@style/AppTheme" ><activityandroid:name="com.mialab.sendmsg.MainActivity"android:label="@string/app_name" > <intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity></application></manifest>使用命令在android模擬器上面安裝apk文件
?
?
?
?
?
?
總結
以上是生活随笔為你收集整理的Android实验五-组件通信2的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SRE Google运维解密——第二章G
- 下一篇: SQL Server 2022 CPT