Intent介绍及使用方法

前言

Intent在Android开发的应用非常常见,今天我就带给大家简单讲一下Intent的相关知识及其用法。


目录

这里写图片描述


一、定义

意图,描述的是应用的动作及其对应的数据。


二、作用


  • 指定当前组件要完成的动作
  • 在Android不同组件不同组件进行数据的传递 

Activity、Service、BroadcastReceiver之间的通信以Intent为通信载体


三、使用方法

3.1指定当前组件要完成的动作

分为显式和隐式意图: 
1. 显式意图 
a. 作用 
明确指定需要启动的组件名 
(调用Intent的构造方法、Intent.setComponent()或Intent.setClass()方法明确指定组件名) 
b. 实例: 
(目的:使用显示Intent的方式使FirstActivity启动SecondActivity)

mybutton.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
//实例化显式Intent,并通过构造函数接收两个参数
//第一个参数Context:启动活动的上下文,一般为当前Activity
//第二个参数Class是指定要启动的目标活动
      Intent intent = new Intent(FirstActivity.this,SecondActivity.class);
//通过Activity类的startActivity()方法来执行该意图操作
//startActivity()方法是Activity类中提供的,专门用于启动活动的方法,它接收一个Intent对象
//我们将构建好的意图对象传入该方法就可以启动目标活动。
      startActivity (intent);
    }
});
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  1. 隐式意图 
    a. 作用 
    没有明确指定需要启动的组件名,但却指定了需要启动组件需要满足的条件 
    1. 通过IntentFilter声明 
      (AndroidManifest.xml文件下的标签下配置的内容,来指定当前活动能够响应的action和category。) 
    2. 声明条件包括动作(Action)和类型(Category): 
      • 动作(Action):用来指明要实施的动作是什么-具体请查看Android.content.intent类; 
      • 类型(Category):一个字符串,包含了关于处理该intent的组件的种类的信息:

//为一个intent对象增加一个category
addCategory()//为一个intent对象删除一个category
removeCategory;
//获取intent所有的category
getCategories()
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  1. 对于显式Intent不需要对Intent进行解析,直接启动; 
    对于隐式Intent需要对Intent进行解析:解析出条件-匹配组件-启动符合条件的组件;
b. 实例 (目的:使用隐示Intent的方式使FirstActivity启动SecondActivity)
      mybutton.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
//实例化一个隐式Intent对象,并指定action参数
    Intent intent = new Intent("android.intent.action.ALL_APPS");
//调用Intent中的addCategory()方法来添加一个category。
//每个Intent中只能指定一个action,但却能指定多个category。
  intent.addCategory("com.example.intent_test.MY_CATEGORY");
                startActivity (intent);
    }
});
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
为了能使SecondActivity能继续响应该Intent,我们需要在AndroidManifest.xml文件下的标签下配置的内容,来指定当前活动能够响应的action和category。
<intent-filter >
      <action android:name="android.intent.action.ALL_APPS"/>
          <category android:name="android.intent.category.DEFAULT">        
          </category>
                <category android:name="com.example.intent_test.MY_CATEGORY"/>
            </intent-filter>
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

3.2 不同组件之间传递数据传递
  1. 使用方法 
    在当前活动中调用PutExtra()方法把要传递的数据暂存在Intent中,并在新启动的Activity中取出Intent中的数据即可

  2. 可传递的数据类型 
    a. 八种基本数据类型(boolean byte char short int long float double) 
    b. String、Bundle、Parcelable、Serializable和CharSequence类型

  3. 实例:

    • 目的:将FristActivity中的一个字符串传递到SecondActivity中,并在SecondActivity中将Intent对象中的数据(FristActivity传递过来的数据)取出
    • 实现代码及解析 
      a. 数据传递代码
mybutton.setOnClickListener(new OnClickListener() {
     @Override
     public void onClick(View v) {
      Intent intent = new       
//使用显示Intent的方式来启动SecondActivity;        
      Intent(FirstActivity.this,SecondActivity.class);
      String data = "I com from FirstActivity";
//通过putExtra()方法传递一个字符串到SecondActivity;
//putExtra()方法接收两个参数:第一个是键,第二个是值,代表真正要传递的数据。
              intent.putExtra("extra_data",data);
              startActivity(intent);
             }
      });
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

b. 数据取出代码

public class SecondActivity extends Activity {
          @Override
          protected void onCreate(Bundle savedInstanceState) {
              super.onCreate(savedInstanceState);
              setContentView(R.layout.activity_second);
//调用getInstent()方法获取用于启动SecondActivit的Intent
              Intent intent = getIntent();
//调用getStringExtra()方法,传入相应的键名,就可以得到传来的数据。
              String data = intent.getStringExtra("data");

          }
      }
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值