Android基础——Intent(意图)

Intent

Intent(意图),Intent提供了一种通用的消息系统,它允许在你的应用程序与其他的应用程序间传递Intent来执行动作和产生事件

Intent是对一次将要进行的操作的抽象描述

我们使用Intent启动一个Activity,Service,Boradcast等,并进行数据的传递

Intent可以划分为显示意图和隐式意图

显示意图:调用Intent.setComponent()或Intent.setClass()方法指定了组件名或类对象的Intent为显示意图,显示意图明确指定了Intent应该传递给哪个组件。

隐式意图:Android系统会根据隐式意图中设置的动作(action),类别(category),数据(URI和数据类型)找到最合适的组件来处理这个意图

Intent Filter(过滤器)其实就是用来匹配隐式Intent的,如果Intent Filter定义的动作,类别,数据与Intent匹配,就会使用Intent Filter所在的组件来处理该Intent。想要接收使用startActivity()方法传递隐式意图的活动必须在他们的意图过滤器中包含“android.intent.category.DEFAULT”

意图的简单用法

使用功能需要打开权限

//打电话的意图
Intent i1=new Intent();
i.setAction(Intent.ACTION_CALL);
i.setData(Uri.parse("tel:222"));
startActivity(i1);
//发短息的意图
Intent i2=new  Intent();
i.setAction(intent.ACTION_SENDTO);
i.setData(Uri.parse("smsto:5554"));
i.putExtra("sms_body","hello");
startActivity(i2);
//上网的意图
Intent i3=new Intent(Intent.ACTION_VIEW,Uri.parse("http://www.baidu.com"));
startActivity(i3);

打开新的Activity,传递参数

Intent intent=new Intent(MainActivity.this,NewActivity.class);
Bundle bundle=new Bundle();//该类用作携带参数
bundle.putString("name","xxxx");
bundle.putInt("age",4);
intent.putExtras(bundle);//附带上额外的数据
startActivity(intent);

新的Activity获取数据

Bundle bundle=this.getIntent().getExtras();
String name=bundle.getString("name");
int age=bundle.getInt("age");

Bundle类用作携带数据,它类似于Map,用于存放key-value名值对形式的值。Bundle的内部实际上是使用了HashMap<String,Object>类型的变量来存放putXxx()方法放入的值

为Intent附加数据的两种方法

第一种,用于批量添加数据到Intent:

Intent intent=new Intent(MainActivity.this,NewActivity.class);
Bundle bundle=new Bundle();//该类用作携带参数
bundle.putString("name","xxxx");
intent.putExtras(bundle);//附带上额外的数据,意图原来的把数据不会丢失,但key同名的数据会被替换

第二种,这种写法的作用等价于上面的写法,只不过这种写法是把数据一个个地添加进Intent,这种写法使用起来比较方便,而且只需要编写少量的代码。

Intent intent =new Intent();
intent.putExtra("name","xxxx");

Intent提供了各种常用类型重载后的putExtra()方法,在putExtra()方法内部会判断当前Intent对象内部是否已经存在一个Bundle对象,如果不存在就会新建Bundle对象,以后调用putExtra()方法传入的值都会存放于该Bundle对象

Activity关闭后返回的数据

在Activity中得到新打开Activity关闭后返回的数据,需要使用系统提供的startActivityForResult(Intent intent,int requestCode)方法打开新的Activity,新的Activity关闭后会向前面的Activity传回数据,为了得到传回的数据在前面的Activity中重写onActivityResult(int requestCode,int resultCode,Intent data)方法:

//第一个参数请求码,即调用startActivityForResult()传递过去的值

//第二个参数为结果码,结果码用于标识返回数据来自哪个新Activity

@Override protected void onActivityResult(int requsetCode,int resultCode,Intent data)

String result =data.getExtras().getString("result");

//得到新Activity关闭后返回的数据


使用startActivityForResult(Intent intent, int requestCode)方法打开新的Activity,新Activity关闭前需要向前面的Activity返回数据需要使用系统提供的setResult(int resultCode, Intent data)方法实现:
          
 Intent intent = new Intent();//数据是使用Intent返回  
 intent.putExtra(“result”, “xxxxx”);//把返回数据存入Intent 
 setResult(RESULT_OK, intent);//设置返回数据

setResult()方法的第一个参数值可以根据业务需要自己定义

Button btn1 = (Button)findViewById(R.id.button1);
 btn1.setOnClickListener(new OnClickListener() {
 @Override
 public void onClick(View v) {
  Uri number = Uri.parse("tel:1234");
  Intent i = new Intent(Intent.ACTION_CALL,number);
  startActivity(i);
 }
};

转载于:https://my.oschina.net/JavaXiaofeng/blog/638826

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值