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 FilterAndroid系统的这种匹配机制是依靠过滤器Filter来实现。与Intent属性保持一致,Intent Filter包含动作、类别、数据等过滤内容。
对应Intent的动作、类别、数据三个属性,一个过滤器也有,
(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中的代码如下:
3、部署文件AndroidManifest.xml文件中的代码如下:
使用命令在android模拟器上面安装apk文件
- 启动模拟器
- 将你要安装的apk文件复制到E:\AndroidSDK\adt-bundle-windows-x86-20131030\sdk\platform-tools文件夹下,我的是在E盘,你的可以根据platform-tools文件的路径来看。
- 点击开始-》运行-》输入cmd
- 然后在控台中找到sdk 文件中platform-tools的路径,我的是在E:盘,所有直接输入E:就进入E:盘目录了,如果你的实在D:盘,你就直接输入D:回撤就行了
- 之后才cd E:\Android SDK\adt-bundle-windows-x86-20131030\sdk\platform-tools进入platform-tools文件的目录下
- 最后在控台中输入adb install AIDLService.apk,我这里安装的是AIDLService.apk所以我输入的是adb install AIDLService.apk,然后回车,你就看到下面信息就表示apk以及安装成功了。赶快看看模拟器里是不是已经安装上了我们需要的软件了呢。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)