Android 意图的使用(Intent)

  • 显式四种跳转方式
    • 布局+代码
    • 效果
  • 隐式意图和隐式意图的跳转
  • Intent概述
  • Action属性
  • Data属性
  • Category属性
    • 按home键时启动自己做的应用
  • Component属性
  • Extra属性(重点)
    • Bundle
    • 传递序列化对象
  • Type属性
  • Flag属性
  • 返回值

显式四种跳转方式

        Intent intent = new Intent(MainActivity.this,HomeActivity.class);startActivity(intent);

        Intent intent = new Intent();intent.setClass(MainActivity.this,HomeActivity.class);startActivity(intent);

        Intent intent = new Intent();ComponentName componentName = new ComponentName(MainActivity.this,HomeActivity.class);intent.setComponent(componentName);startActivity(intent);

 startActivity(new Intent(MainActivity.this,HomeActivity.class));

布局+代码

布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity"android:orientation="vertical"android:gravity="center"><Buttonandroid:id="@+id/bt_intentmain"android:layout_width="wrap_content"android:layout_height="40dp"android:text="跳过去"/><Buttonandroid:id="@+id/bt_intentOne"android:layout_width="wrap_content"android:layout_height="40dp"android:text="按钮一"/><Buttonandroid:id="@+id/bt_intentTwo"android:layout_width="wrap_content"android:layout_height="40dp"android:text="按钮二"/><Buttonandroid:id="@+id/bt_intentThree"android:layout_width="wrap_content"android:layout_height="40dp"android:text="按钮三"/></LinearLayout>

代码

import androidx.appcompat.app.AppCompatActivity;import android.content.ComponentName;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;public class MainActivity extends AppCompatActivity implements View.OnClickListener {private  Button mBtIntent,mBtIntentOne,mBtIntentTwo,mBtIntentThree;@Overrideprotected void onCreate(Bundle savedInstanceState) {Log.d("TAG","onCreate");super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);initView();mBtIntent.setOnClickListener(this);mBtIntentOne.setOnClickListener(this);mBtIntentTwo.setOnClickListener(this);mBtIntentThree.setOnClickListener(this);setTitle("页面A");}private  void initView(){mBtIntent = findViewById(R.id.bt_intentmain);mBtIntentOne = findViewById(R.id.bt_intentOne);mBtIntentTwo = findViewById(R.id.bt_intentTwo);mBtIntentThree = findViewById(R.id.bt_intentThree);}@Overridepublic void onClick(View v) {switch (v.getId()){case R.id.bt_intentmain:IntentOne();break;case R.id.bt_intentOne:IntentTwo();break;case R.id.bt_intentTwo:IntentThree();break;case R.id.bt_intentThree:IntentFour();break;default:break;}}private  void IntentOne(){Intent intent = new Intent(MainActivity.this,HomeActivity.class);startActivity(intent);}private  void IntentTwo(){Intent intent = new Intent();intent.setClass(MainActivity.this,HomeActivity.class);startActivity(intent);}private  void IntentThree(){Intent intent = new Intent();ComponentName componentName = new ComponentName(MainActivity.this,HomeActivity.class);intent.setComponent(componentName);startActivity(intent);}private  void IntentFour(){startActivity(new Intent(MainActivity.this,HomeActivity.class));}
}

效果

隐式意图和隐式意图的跳转

隐式意图
没有明确指定组件名的Intent为隐式意图,系统会根据隐式意图中设置的动作(action)、类别(category)、数据UIL等来匹配最合适的组件。

首先在清单文件中使用意图过滤器设置活动的名字
< action android:name=“HomeActivity” />
< category android:name=“android.intent.category.DEFAULT” />

        <activityandroid:name=".HomeActivity"android:launchMode="singleInstance" ><intent-filter><action android:name="HomeActivity" /><category android:name="android.intent.category.DEFAULT" /></intent-filter></activity>

跳转

        Intent intent = new Intent();intent.setAction("HomeActivity");startActivity(intent);

Intent概述

Intent是Android的核心组件,利用消息实现应用程序间的交互机制,这种消息描述了应用中一次操作的动作、数据以及附加数据,系统通过该Intent的描述负责找到对应的组件,并将Intent传递给调用的组件,完成组件的调用。

Intent由动作、数据、分类、类型、组件、扩展信息、标记等内容组成,每个组成都由相应的属性进行表示,并提供设置和获取相应属性的方法。

Action属性

• Action属性用于描述Intent要完成的动作,对要执行的动作进行一个简要描述。Intent类定义了一系列Action属性常量,用来标识一套标准动作,如ACTION_CALL(打电话)等。
• 通常与Data一般匹配使用

例如 短信发送
一、
Uri uri= Uri.parse(“tel:10086”);
Intent intent= new Intent(Intent.ACTION_CALL, uri);
//intent.setData(uri));//设置数据
startActivity(intent);
二、
Manifest里需要添加CALL_PHONE权限

三、
危险权限需要动态申请。

Data属性

Action和Data一般匹配使用,不同的Action由不同的Data数据指定

Category属性

• Category属性指明一个执行Action的分类
• Intent中定义了一系列Category属性常量

按home键时启动自己做的应用

      <intent-filter><category android:name="android.intent.category.HOME"/><category android:name="android.intent.category.DEFAULT"/><action android:name="android.intent.action.MAIN"/></intent-filter>

Component属性

一、Component属性用于指明Intent的目标组件的类名称。
二、通常Android会根据Intent中包含的其他属性的信息,比如Action、Data/Type、Category进行查找,最终找到一个与之匹配的目标组件。但是,如果指定了Component这个属性,Intent则会直接根据组件名查找到相应的组件,而不再执行上述查找过程。指定Component属性后,Intent的其他属性都是可选的。
三、根据Intent寻找目标组件时所采用的方式不同,可以将Intent分为两类:
显式Intent,这种方式通过直接指定组件名称Component来实现;

Intent intent = new Intent();
ComponentName name = new ComponentName(IntentActivity.this,MainActivity.class);
intent.setComponent(name);
startActivity(intent);

**隐式Intent,**这种方式通过Intent Filter过滤实现,过滤时通常根据Action、Data和Category属性进行匹配查找。

Intent intent = new Intent();
intent.setClassName(IntentActivity.this,"com.ugrow.day02.MainActivity");

显式Intent通过**setComponent()、setClassName()或setClass()**设置组件名

Intent intent = new Intent();
intent.setClass(IntentActivity.this,MainActivity.class);

Extra属性(重点)

通过使用Intent对象的putExtra()方法来添加附加信息、和信息传递
信息添加 方式类似于键值对

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

信息取出 另一个页面
通过使用Intent对象的getXXXExtra()方法可以获取附加信息。
例如,将上面代码存入Intent对象中的人名获取出来,
因存入的是字符串,所以可以使用getStringExtra()方法获取数据

 Intent intent = getIntent();String name=intent.getStringExtra("name");

Bundle

打包 当一个页面的数据会向多个页面传递的时候并且不是每个页面都会用到这些数据
比如A页面传到B页面 B页面不需要用数据 但需要将数据传递给C页面
进行多次使用 如果数据过多那么将会导致每一个页面都有大量的get方法 页面不整洁
因此使用Bundle打包

Intent intent = new Intent();
Bundle bundle = new Bundle();
bundle.putString("user",user.getText().toString());
bundle.putString("pwd",pwd.getText().toString());
intent.putExtras(bundle);

Bundle extras = getIntent().getExtras();
String user = extras.getString("user");
String pwd = extras.getString("pwd");

传递序列化对象

Javabean对象序列化后可以直接使用Extra方法传递对象

一、Javabean对象需要实现Serializable接口

CommentBean implements Serializable

二、传数据

intent.putExtra("bean",commentBean);

三、取数据

 CommentBean commentBean = new CommentBean();Intent intent=getIntent();commentBean = (CommentBean) intent.getSerializableExtra("bean");

Type属性

Intent intent = new Intent();
Uri uri = Uri.parse("file:///data/vivo.mp4");
intent.setAction(Intent.ACTION_VIEW);
intent.setDataAndType(uri,"video/*");
startActivity(intent);

Flag属性

Flag属性用来设定Activity的启动模式,与清单文件中的设置launchMode属性值相同

Intent intent = new Intent();
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

Intent.FLAG_ACTIVITY_CLEAR_TOP = singleTask
Intent.FLAG_ACTIVITY_SINGLE_TOP = singleTop
Intent.FLAG_ACTIVITY_NEW_TASK = singleInstance

返回值

一、A页面传值给B页面
startActivity() (putExtra,Bundle)
二、B页面传值给A页面
startActivityForRestult()
setResult(resultCode,Intent)
onActivityResult

A页面跳转B页面 如果转账成功则返回过江 失败则返回有鬼

页面A

    Intent intent = new Intent(MainActivity.this,HomeActivity.class);intent.putExtra("money","转账100元");//有返回值的跳转/** 第一个参数Intent对象* 第二个参数 RequestCode*/startActivityForResult(intent,REQUSET_CODE);
    @Override//第一个参数 是不是我要的返回结果  第二个参数 是谁返回给我的 第三个参数 返回的附加信息protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {super.onActivityResult(requestCode, resultCode, data);if(requestCode == REQUSET_CODE && resultCode == HomeActivity.RESULT_CODE){String msg = data.getStringExtra("msg");Toast.makeText(MainActivity.this,msg,Toast.LENGTH_SHORT).show();}}

页面B

Intent intent = new Intent();Intent getIn = getIntent();String money = getIn.getStringExtra("money");if(TextUtils.isEmpty(money)){intent.putExtra("msg","有鬼!");}else{intent.putExtra("msg","过江!");}setResult(RESULT_CODE,intent);//关闭页面finish();

Android页面跳转(Intent)相关推荐

  1. android 跳转页面出错,Android 页面跳转(无/含有返回结果)

    一.两个页面的xml文件 factivity android:layout_width="match_parent" android:layout_height="wra ...

  2. Android:页面跳转传参方式一,页面跳转传参方式二

     一.页面跳转传参方式一 跳转的过程如何传参:也就是页面之间如何传递参数,有点像函数调用如何传参,页面跳转也要传参. 复制一个工程 你要跳转,(现在的代码如下),intent 既然能设置跳转到哪个页面 ...

  3. Android 页面跳转时发生双击导致app闪退的解决方案

    在页面跳转时双击双击,查阅了各种资料 尝试一:从双击事件出发,避免双击事件 例如重写onClick事件 public abstract class NoDoubleClickListener impl ...

  4. android页面跳转时获取地址栏,Android 利用scheme页面内跳转协议进行跳转

    什么是 URL Scheme? android中的scheme是一种页面内跳转协议. 通过定义自己的scheme协议,可以非常方便跳转app中的各个页面: 通过scheme协议,服务器可以定制化告诉A ...

  5. Android页面跳转、延时跳转、跳转传值

    工程目录: manifests主activity标签放在最前面,跳转页面activity放在后面 <?xml version="1.0" encoding="utf ...

  6. Android 页面跳转时闪屏问题

    界面间来回跳转,Activity之间跳转或者Fragment跳转Activity出现闪屏问题

  7. Android 学习(四)——Android Studio 页面跳转

    一.显式意图跳转 1.设置按键(参考第三次作业:设置按键的三种基本方式) 2.新建Activity2 3.按键侦听,设置页面跳转 Intent intent = new Intent(this,Mai ...

  8. Android intent 页面跳转

    slidemenu_layout 部分列表(点击帮助跳转到user_help_layout.xml页面) //slidemenu_layout.xml <?xml version="1 ...

  9. android开发 转跳功能,如何在Android中利用Intent实现一个页面跳转功能

    如何在Android中利用Intent实现一个页面跳转功能 发布时间:2021-02-20 17:06:31 来源:亿速云 阅读:113 作者:Leah 本篇文章为大家展示了如何在Android中利用 ...

  10. android上方导航条跳转页面,《成为大前端》系列 7. 多页面、页面跳转和Navigation模块...

    介绍 开发过移动 Web 页面的同学都知道,单个页面由客户端的 UI 所承载,页面间的跳转也 不再是使用 window 和 location,也不是使用 a 标签,而且调用 Native 写好的 br ...

最新文章

  1. 【MPI高性能计算】蒙特卡洛方法计算pi值
  2. python standard lib_跟Python Standard Library混个脸熟(一)
  3. 【转】C++ this指针(直戳本质)
  4. 你们公司内部有WiKi么
  5. LiveJournal发展历程
  6. 开源mindmap_Java开发人员访谈的MindMap
  7. NBIOT(3)---NBIOT 移远BC28模块+stm32
  8. 主日--使徒行传--20150419
  9. 【论文写作】课程指导平台的开发中系统流程如何写
  10. java消除整型数组中重复的元素,排序后输出新数组
  11. Nagios学习实践系列——配置研究[监控当前服务器]
  12. Android笔记: 在Eclipse环境下使用Genymotion模拟器
  13. Unbuntu学习笔记之安装vmware tools
  14. 手把手,从零开始搭建个人博客网站(附源码)
  15. 小小串联电阻,大大的作用
  16. 【深入理解JS核心技术】14. 什么是一元函数
  17. 重聚焦显微镜原理和理解
  18. 线性代数的本质(Essense Of Linear Algebra)[1]
  19. Mac软件打开时闪退怎么办?苹果电脑软件崩溃解决办法
  20. linux查看目录是不是btrfs,btrfs文件系统常用命令使用

热门文章

  1. 个人账号密码管理体系(密码篇)
  2. 【牛客】CPU的运算速度与许多因素有关,下面______是提高速度的有效措施?
  3. 糗百文化:糗事百科的运营哲学
  4. 用python计算有效前沿_【投资组合理论】Python绘制上证50成分股有效前沿和CML
  5. IT行业英语自我介绍必备
  6. 从石器时代到硅器时代
  7. linux 内核---------董昊 ( Robin Dong ) and OenHan
  8. 红杉资本投资的企业汇总
  9. 关于socket阻塞与非阻塞情况下的recv、seng、read、write返回值问题
  10. K210 Draco AI环境的搭建(1)