Intent基本使用
可以理解为不同组件通信的媒介或者信使。
Intent可以启动一个Activity,也可以启动一个Service,还可以发起一个广播Broadcast。
具体方法如下表:
startActivity()
startActivityForResult()
startService()
bindService()
Broadcasts
sendBroadcast()
sendOrderedBroadcast()
sendStickyBroadcast()
1.启动Activity:
向&或方法传递一个Intent对象,可以启动一个activity,或使得一个已经存在的activity去做一些新的事情。
(也可以向&&去传递这个Intent对象,返回调用了startActivityForResult()的activity的一些信息。)
2.启动Service:
向&&方法传递Intent对象可以初始化一个service或者向一个已经存在的service传递新的指令。
类似的,向&方法传递Intent对象可以在调用所在的组件和目标service之间建立一种连接。如果这个service并没有开始运行,则它可以初始化这个service。
3.发起广播Broadcast
可以向下面的广播方法传递Intent对象来发起广播:
& ,, 或&。系统会找到相应的广播接收者对此进行响应。
Intent在寻找目标组件时有两种方法:
第一种,显式调用,通过Component name直接指定;
第二种,隐式调用,没有明确指定目标组件的名称,那么就要通过一定的条件过滤筛选。
启动activity、service和broadcast的消息系统是没有任何重合的,即,一个要启动activity的Intent对象是绝对不会启动一个service的。
Intent对象构成
Intent对象由以下六个部分组成:
Component name
Action
Category
Extras
Component name
Component name即组件名称,是要处理这个Intent对象的组件名称。
组件名称对象由类来封装,组件名称包含包名称和类名称,被声明在AndroidManifest.xml文件中。
组件名称通过&,,设置,通过获取。
需要注意的是Component name是一个可选项,如果被设置,那么Intent对象就显式指定了要转向的组件,如果没有被设置,则Intent对象需要根据其他信息进行筛选查找。
Action是指Intent要完成的动作,是一个字符串常量。
在Intent类里面定义了很多Action常量,其中有:
类中有很多预定义的常量,为了一些通常的动作;还有一些定义在Android API的其他地方。
也可以自己定义Action常量,自定义的常量需要加上你的应用的包名作为前缀。
Action在很大程度上决定了Intent的其他部分是如何构造的,尤其是&&和&域。(就好像函数名会决定着参数值和返回值一样。)所以Action的名字应该尽可能具体,并且它们应该和Intent中的其他域紧密结合。
使用&&和&来设置和读取Action属性。
Data属性是执行动作的URI和MIME类型,不同的动作有不同的数据规格。
比如,Action是ACTION_EDIT时,数据域将是文档的URI;Action是ACTION_CALL时,数据域是&tel:&URI&,带有要拨打的电话号码;如果Action是&ACTION_VIEW,则数据域是http:&URI。
当匹配intent和能够处理intent所带的数据的组件时,知道数据类型(MIME类型)是很重要的。比如,一个展示图像的组件不应该被叫去播放一个音频。
很多情况下,从URI可以看出数据类型,比如content: URIs,表示数据是在设备上,但是是由content provider控制。
数据类型也可以显式指定,比如方法指定数据为URI,&指定为MIME type,&指定它既为URI又为MIME type。读取的时候URI用,MIME type用。
Category是一个字符串,提供了额外的信息,有关于能够处理这个Intent对象的组件种类。
一个Intent对象中可以包含任意数量的category描述信息。
Intent类中也定义了一些Category常量:
与category相应的方法有添加、移除&和获取所有category&&。
传递给Intent的额外数据,以Bundle的形式定义,就是一些键值对。就好像一些动作和特定的数据URI对应,一些动作和特定的extras对应。
比如ACTION_TIMEZONE_CHANGED intent对象有一个&"time-zone"的extra来确认新的时区;&
ACTION_HEADSET_PLUG有一个"state"&extra表示耳机是否插入,还有一个&"name" extra关于耳机类型;
如果你要设计一个SHOW_COLOR动作,那么extra中应该包含颜色值。
Intent对象有一系列的putXXX()函数用于放入各种数据类型,相应的也有一系列的getXXX()函数用于读取数据。
实际上,数据可以被作为一个Bundle对象被使用,利用&&和&&方法。
各种类型的Flag。很多是用来指定Android系统如何启动activity,还有启动了activity后如何对待它。所有这些都定义在Intent类中。
官方文档:
博客:
阅读(...) 评论()Android反射出一个类中的其他类对象并调用其对应方法
Android反射出一个类中的其他类对象并调用其对应方法
发布时间: 4:51:22
编辑:www.fx114.net
本篇文章主要介绍了"Android反射出一个类中的其他类对象并调用其对应方法",主要涉及到Android反射出一个类中的其他类对象并调用其对应方法方面的内容,对于Android反射出一个类中的其他类对象并调用其对应方法感兴趣的同学可以参考一下。
MainActivity如下:
package cn.
import java.lang.reflect.F
import java.lang.reflect.M
import android.os.B
import android.app.A
* Demo描述:
* 在一个类中有另外一个类的对象
* 比如此处的Worker类中有一个Student类的对象:
* private Student mS
* 目前需求:
* 我们需要反射出Worker类中的 private Student mStudent
* 并且使用该对象调用其对应的方法
public class MainActivity extends Activity {
private Field mStudentF
private Object mStudentO
private Class mStudentC
private Method mStudentShowM
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
private void init(){
String workerClassName=&cn.testreflect.Worker&;
Class workerClass=Class.forName(workerClassName);
//得到Worker类中的mStudent字段
mStudentField=workerClass.getDeclaredField(&mStudent&);
mStudentField.setAccessible(true);
//实例化mStudent对象
mStudentObject=mStudentField.get(new Worker());
//得到mStudent对象对应类的Class
mStudentClass = Class.forName(mStudentObject.getClass().getName());
//反射出该Class类中的show()方法
mStudentShowMethod = mStudentClass.getDeclaredMethod(&show&);
//取消访问私有方法的合法性检查
mStudentShowMethod.setAccessible(true);
//调用show()方法
mStudentShowMethod.invoke(mStudentObject);
} catch (Exception e) {
System.out.println(e.toString());
Worker如下:
package cn.
public class Worker {
private Student mS
public Worker() {
mStudent=new Student(&I am a student&, 9527);
System.out.println(&---& public Worker(){ }&);
public Worker(int age, String name) {
this.age =
this.name =
mStudent=new Student(&I am a student&, 9527);
System.out.println(&---& public Worker(int age, String name){ }&);
public int getAge() {
public void setAge(int age) {
this.age =
public String getName() {
public void setName(String name) {
this.name =
public String toString() {
return &Worker [age=& + age + &, name=& + name + &]&;
public void printMessage(String name,int age,int salary){
System.out.println(&name=&+name+&,age=&+age+&,salary=&+salary);
Student如下:
package cn.
public class Student {
public Student() {
public Student(String name, int age) {
this.name =
this.age =
public String getName() {
public void setName(String name) {
this.name =
public int getAge() {
public void setAge(int age) {
this.age =
public String toString() {
return &Student [name=& + name + &, age=& + age + &]&;
public void show(){
System.out.println(&-----& call method show()&);
main.xml如下:
&RelativeLayout xmlns:android=&/apk/res/android&
xmlns:tools=&/tools&
android:layout_width=&match_parent&
android:layout_height=&match_parent&
android:layout_width=&wrap_content&
android:layout_height=&wrap_content&
android:text=&Android中Java反射技术的使用&
android:layout_centerInParent=&true&/&
&/RelativeLayout&
本文标题:
本页链接:}