Intent(三)--组成

115 阅读2分钟

「这是我参与2022首次更文挑战的第19天,活动详情查看:2022首次更文挑战

Intent属性

4.Extras

组件间相互传递信息比较常见的做法就是用Intent携带数据。可以使用putExtra()添加数据(是key-value形式),也可以使用Bundle对象,Bundle插入到Intent中。

常见的Extra有:

  • EXTRA_BCC 存放邮件密送地址的字符串数组
  • EXTRA_CC 存放邮件抄送地址的字符串数组
  • EXTRA_EMAIL 存放邮件发送地址的字符串数组
  • EXTRA_INTENT 使用ACTION_PICK_ACTIVITY动作时装有Intent选项的键
  • EXTRA_KEY_EVENT 触发该Intent的案件的KeyEvent对象
  • EXTRA_PHONE_NUMBER 存放调用ACTION_CALL 时的电话号码,类型为String
  • EXTRA_TEXT 使用ACTION_SEND动作时,存放邮件内容,类型为CharSequence
  • EXTRA_TITLE 使用ACTION_CHOOSER动作时,存放对话框标题的键,类型为CharSequence
  • EXTRA_UID 使用ACTION_UID_REMOVED动作时,存放删除的用户id的键,类型为int 取出数据的方法有:
  • getXxxExtra(String name,基本数据类型 默认值) Xxx为基本数据类型
  • getXxxExtra(String name) Xxx为Srting等引用类型
  • getBundleExtra(String name) 取出Bundle对象的方法
  • getXxxArrayExtra() 取出Xxx类型对应数组方法
    //添加Extra
    Intent intent = new Intent(this,TagerActivity.class);
    intent.putExtra("int",1000);
    int[] arrayInts={1,2,3};
    intent.putExtra("int_array",arrayInts);
    intent.putExtra("string","extra_string");
    startActivity(intent);

    //取出数据
    Intent intent=getIntent();
    int i=intent.getIntExtra("int",0);
    int[] ints=intent.getIntArrayExtra("int_array");
    String a=intent.getStringExtra("string");
5.Flags

用来指示系统如何启动一个Activity(比如:Activity 应属于哪个任务,以及启动之后如何处理),通过setFlags()或者addFlags()把标签flag用在Intent中

常见的Flags有:

  • FLAG_ACTIVITY_CLEAR_TOP 相当于SingleTask

    将会把要启动的Activity之上的Activity全部弹出Activity栈

  • FLAGE_ACTIVITY_SINGLE_TOP 相当于SingleTop

    如果当前栈顶的Activity是要启动的Activity,直接复用,不会再启动新的Activity

  • FLAG_ACTIVITY_NEW_TASK 类似于SingleInstance

    默认的启动旗标,该旗标控制重新创建一个新的 Activity

  • FLAG_ACTIVITY_NO_HISTORY

    当离开该Activity后,该Activity将被从任务栈中移除

  • FLAG_GRANT_READ_URI_PERMISSION

    临时访问读权限 intent的接受者将被授予 INTENT 数据uri 或者 在ClipData 上的读权限

  • FLAG_GRANT_WRITE_URI_PERMISSION

    临访问写权限 intent的接受者将被授予 INTENT 数据uri 或者 在ClipData 上的写权限

  • FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS 如果设置,新的Activity不会在最近启动的Activity的占中保存

  • FLAG_RECEIVER_REGISTERED_ONLY

    设置这个flag,发送广播只有动态注册才能调用,组件(xml 中定义action)不会被被launch