小工具知识网

当前位置: 首页 > 行业知识 > Android中Intent的使用:Activity创建及跳转

行业知识

Android中Intent的使用:Activity创建及跳转

2026-11-10 18:00:52 来源:互联网转载

文章目录

    • Intent?
    • 显示使用Intent
    • 隐式使用Intent
      • action 参数类型 字符型
      • category 参数类型 字符型
      • date 参数类型 Uri + mimeType
      • 完整的过滤器
      • 隐式启动Activity
      • Intent携带数据的跳转
      • 跳转后的页面给上一个Activity返回数据

        Intent?

        ​ intent是Android中各组件之间进行交互的一种重要方式,不仅可以指明当前组件想要执行的动作,还可以在不同组件之间传递数据。

        ​ Intent作用:实现Android中,Activity之间的跳转。

        ​ 应用场景:启动Activity,Service,发送广播等场景。

        ​ 使用分类:显示Intent和隐式Intent.

        显示使用Intent

        明确指明想要跳转的Activity,直接指定Activity的方式条状,是开发中最常用的启动方式

        1. 创建Intent对象;
        2. 使用setClass()设置请求目的地,传入两个参数,上下文和目标Activity的Class对象
        3. 使用putExtra()方法添加数据,传入两个参数:key值(用于取出数据)和数据value;
        4. 使用startActivity()方法发送请求(启动新的Activity) ;
        //1.创建Intent对象 Intent intent = new Intent() ;//2.设置跳转目的地Intent.setClass(this,SecondActivity.class);//3.封装数据intent.putExtra("msg","页面跳转成功");//4.开启跳转startActivity(intent);

        隐式使用Intent

        ​ 根据一些条件过滤出最合适的Activity,没有明确的意图,所以是"隐式"。

        ​ 隐式启动Activity,必须在清单文件AndroidMainifest.xml里给这个Activity配置一个或多个过滤器

        ​ 一个过滤器有三种参数,分别是action,category,date

        action 参数类型 字符型

        ​ 过滤器中可以有多个action, 而Intent对象中最多只能设置一个action,因为每一次setAction就会把前面的action覆盖,所以Intent只需匹配任意一个action就可以了。


        category 参数类型 字符型

        ​ Intent 中可以设置多个category,,只要Intent设置了 category,过滤器中就必须有。否则匹配失败。

        ​ 系统会默认给Intent 添加上 android.intent.category.DEFAULT,所以能被隐式启动的Activity,在 AndroidManifest.xml 必须给过滤器添加上这个category。


        date 参数类型 Uri + mimeType

        ​ 只要过滤器中有data和mimeType,则intent必须设置data,所谓与之匹配就是:Uri和mimeType都必须一模一样。每一次setDataAndType就会把前面的覆盖。

        ​ mimeType:指媒体类型,image/png , audio/mpeg4-generic和video/*等,

        ​ 分别指图片,文本,视频等

        ​ Uri的形式是: : // : / | |

        ​ scheme是 Uri 的形式,可以是:file,coontent,http等

        ​ Host 是域名,比如:www.baidu.com

        ​ port 是端口,比如:8080

        ​ path,pathPrefix 和 pathPattern 表示路径的参数

        完整的过滤器

                                                                                                                  

        隐式启动Activity

            public void startActivity(Activity activity){        Intent intent = new Intent() ;        //Action只需匹配上一个就可以        intent.setAction("custom.TESTACTION");        //Category必须全部匹配上        intent.addCategory("custom.TESTECATEGORY");        //data只需要匹配上一个就可以 intent.setDataAndType(Uri.parse("beauty://china:250/op"),"history/yyh");    }

        Intent携带数据的跳转

        ​ intent可以通过putExtra()携带数据进行跳转

        ​ putExtra(key,value):

        • 携带方法中可以直接添加一些简单数据
        • ​ 传递类的对象(需要序列化对象后才可传递)
        • ​ 携带复杂数据可以借助Bundle实现,相当于将数据封装在Bundle中,如果传递的数据是对象时,该对象必须可序列化。

          ​ Bundle的使用步骤

          1. 创建对象,封装数据
          //实现序列化接口Serializable的Student类Student student = new Student("哇哈哈","521",66);//创建Bundle对象,封装到Bundle中bundle.putSerializable("stu",student);

          ​ 2.将Bundle添加到Intent对象中

          //将bundle封装到intent中Intent intent = new Intent();intent.putExtra("msg", bundle);//显示设置跳转意图intent.setClass(this, ThirdActivity.class);startActivity(intent);

          3.在跳转的Activity中获取Bundle

          //1.获取intentIntent intent = getIntent();//2.获取BundleBundle bundle = intent.getBundleExtra("msg");//3.获取学生对象Student student = (Student)bundle.getSerializable("stu");

          跳转后的页面给上一个Activity返回数据

          请求页面使用registerForActivityResult方法

          方法定义如下:

          public final  ActivityResultLauncher registerForActivityResult(    @NonNull ActivityResultContract contract,    @NonNull ActivityResultCallback callback) {    return registerForActivityResult(contract, mActivityResultRegistry, callback);}

          (1)使用registerForActivityResult获取launcher ;

          //获取launcherlauncher = registerForActivityResult(        new ActivityResultContracts.StartActivityForResult(),        new ActivityResultCallback() {            @Override            public void onActivityResult(ActivityResult result) {                //获取跳转Activity返回的数据                switch (result.getResultCode()){ //resultCode在跳转Activity设置                    case 1:                        Intent intent = result.getData();                        break;                }            }        });

          (2)显示使用Intent,并使用launcher启动

          Intent intent = new Intent();intent.setClass(FirstActivity.this, FourthActivity_name.class);launcher.launch(intent);

          (3))在跳转Activity处获取Intent,并使用setResult返回;

          //获取上一个Activity传过来的intentIntent intent = getIntent(); //设置返回的IntentIntent back_intent = new Intent();intent.setClass(this, FirstActivity.class);//使用setResult返回,设置resultCode并传入要返回的intentsetResult(1, back_intent);//关闭当前ActivityFourthActivity_name.this.finish();

上一篇:计网面试题整理下

下一篇:从电脑进服务器怎么进?