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;	
	@Override
	protected 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() {			
			@Override
			public 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);				
			}
		});
	}
	@Override
	public 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;  
	                }  
	         } 
		}
	}
	@Override
	public 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" >

    <TableRow
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" >

        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="SentTo:" />

        <EditText
            android:id="@+id/txttel"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:ems="10"
            android:inputType="phone" />
    </TableRow>

    <Button
        android:id="@+id/btnsend"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="发送消息" />

    <TableRow
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" >

        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="Message:" />

        <EditText
            android:id="@+id/txtmsg"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="" />
    </TableRow>

    <TableRow
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" >

        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="Date:" />

        <EditText
            android: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-sdk
        android:minSdkVersion="14"
        android:targetSdkVersion="19" />
    <uses-permission android:name="android.permission.READ_SMS"></uses-permission>  
    <application
        android:allowBackup="true"
        android:icon="@drawable/icon"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android: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文件

  1. 启动模拟器
  2. 将你要安装的apk文件复制到E:\AndroidSDK\adt-bundle-windows-x86-20131030\sdk\platform-tools文件夹下,我的是在E盘,你的可以根据platform-tools文件的路径来看。
  3. 点击开始-》运行-》输入cmd
  4. 然后在控台中找到sdk 文件中platform-tools的路径,我的是在E:盘,所有直接输入E:就进入E:盘目录了,如果你的实在D:盘,你就直接输入D:回撤就行了
  5. 之后才cd E:\Android SDK\adt-bundle-windows-x86-20131030\sdk\platform-tools进入platform-tools文件的目录下
  6. 最后在控台中输入adb install AIDLService.apk,我这里安装的是AIDLService.apk所以我输入的是adb install AIDLService.apk,然后回车,你就看到下面信息就表示apk以及安装成功了。赶快看看模拟器里是不是已经安装上了我们需要的软件了呢。

 

 

 

 

 

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值