Android开发---Intent的简单介绍以及活动跳转传递信息

在使用郭霖大神的《第一行代码》学习安卓开发后对Intent的一些小笔记。
Intent组件 在安卓开发中类似于信使,但有完全不是的一种组件。它是连接四大组件的重要组成部分。
1、Intent的概念:

Android中提供了Intent组件来辅助应用间的信息传递,它也可用于应用程序内部的activity,servicebroadcast receiver之间的交互。

Intent是一种运行时绑定(runtime
binding)机制,它能在程序运行的过程中连接两个不同的组件。通过Intent,你的程序可以向Android表达某种请求或者意愿,Android会根据意愿的内容选择适当的组件来响应。

2、Intent的两种使用方式显示Intent和隐式Intent

首先是显示Intent

在一个活动的按钮点击事件中
增加

    Intent intent =new Intent (当前活动.this,要启动的活动.class);
    StartActivity(intent);

比如在First的活动中启动second活动可以这么写

      Intent intent =new Intent (First.this,second.class);
      StartActivity(intent);

这种方法不需要AndroidManifest.xml中额外添加代码

接下来是手机应用比较多的隐式Intent
提到隐式Intent之前简单说一下Intent的启动过程在这里插入图片描述
所谓的隐式启动就是不指明启动那个活动,而是从所有活动中筛选出符合条件的活动。如果有多个活动会提示选择一个活动。那么筛选的过程就如上图所示(灵魂作图手。。→_→)
首先在AndroidManifest.xml你要启动的活动中添加

    <intent-filter>
        <action android:name="com.example.activitytest.ACTION_START"/>
        <category android:name="android.intent.category.DEFAULT"  />
    <category android:name="com.example.activitytest.MY_CATEGORY" />
    
    </intent-filter>

Action 后引号的内容为当前活动的名字可以随意命名。
标签则附加了一些信息,精确指明当前活动能够响应Intent的可能还有cate
注意只有当Action和category的内容等同时匹配,Intent指定的ACtion和category时,活动才能响应Intent 换句话来说就是才能启动。
关于按钮事件的代码需要加入

Intent intent =new Intent(“com.example.activitytest.ACTION_START/*你在name中的名字*/);

上述第三行,每个Intent只能指定一个action但是却能指定多个category。
所以在此增加一个category,在依次关联的活动的按钮点击事件中增加

intent.addCategory("com.example.activitytest.MY_CATEGORY");

.
.

3.更多的隐式Intent用法如下

Intent intent=new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse("http://www.bilibili.com"));
startActivity(intent);

在按钮中增加这些 不需要在XML中注册,直接就可以打开网站。

setData() 他主要接受一个Uri对象,主要用于指定正在操作的数据。然后通过字符串的形式传到Uri.parse()方法中解析。
上述代码就是通过点击事件打开bilibili。
4.Intent对不同组件发送消息的不同机制

  • 使用Context.startActivity()Activity.startActivityForResult(),传入一个intent来启动一个activity。
  • 使用 Activity.setResult(),传入一个intent来从activity中返回结果。
  • 将intent对象传给Context.startService()来启动一个service或者传消息给一个运行的service。
  • 将intent对象传给 Context.bindService()来绑定一个service。
  • 将intent对象传给 Context.sendBroadcast()
  • Context.sendOrderedBroadcast(),或者Context.sendStickyBroadcast()等广播方法,则它们被传给 broadcast receiver

5.Intent的相关属性

  • component(组件):目的组件
  • action(动作):用来表现意图的行动
  • category(类别):用来表现动作的类别
  • data(数据):表示与动作要操纵的数据
  • type(数据类型):对于data范例的描写
  • extras(扩展信息):扩展信息
  • Flags(标志位):期望这个意图的运行模式

6.使用Intent传递数据
一、向下一个活动传递数据
在当前活动中首先定义传递的数据,然后使用Intent方法进行传递数据。
这里使用显示传递

Intent intent=new Intent(SecondActivity.this,ForthActivity.class);
//括号内的形式为(当前活动.this,传递给的活动.class);
intent.putExtra("extra_data",data);
//这里调用intent的putExtra()方法,括号内的内容是(你传递数据的名称,数据)
startActivity(intent);
//启动传递目标的活动。

然后在传递的目标活动中需要

Intent intent=getIntent();//此项主要用于启动上一个活动的Intent
String data1=intent.getStringExtra("extra_data");//取出数据,什么类型就用对应的方法此处是String 就用getStringExtra,如果是整型就用getIntExtra,括号内为传递数据的名称。
Log.d("SecondActivity",data1);//打印数据

二、返回数据给上一个活动
首先在第一个活动的按钮点击事件中

Intent intent=new Intent(firstActivity.this,secondActivity.class);//通过显式Intent启动第二个活动。
startActivityForResult(intent,1);//第一个参数是要打开的活动,第二个参数是请求码,用于在回调的过程中判断数据来源。

在第二个活动的按钮事件中有
(通过点击按钮返回数据,并关闭当前窗口)

Intent intent=new Intent();
intent.putExtra("return_data","hello firstActivity");
setResult(RESULT_OK,intent);
finish();

此处的intent仅仅只是用于传递数据,没有“意图”。
SetResult(),接受的两个参数分别是,第一个用于处理上一个活动返回处理结果,第二个参数则是返回数据。
在第一个活动中接受数据的代码为
首先需要重写onActivityResult方法。
这个方法的三个参数分别是:启动活动时候的请求代码,返回数据时传入的处理结果,带着返回数据的Intent。注意第二个是处理过后的结果不是数据本身。
第一个参数主要是判断数据来源确定是目标活动传来的数据

@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    switch(requestCode)
    {
        case 1:
            if(resultCode==RESULT_OK) {
                String returnData = data.getStringExtra("return_data");
//名称一定要对应
                Log.d("firstActivity",returnData);
                break;
            }
            default:
    }
}

也可以不用点击按钮事件来返回数据。
在第二个活动中重写onBackPressed();方法

@Override
public void onBackPressed() {
    Intent intent =new Intent();
    intent.putExtra("return_data","Hello firstActivity");
    setResult(RESULT_OK,intent);
    finish();

}
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值