zoukankan      html  css  js  c++  java
  • Android学习之基础知识四-Activity活动3讲(Intent的使用)

    主活动名称FirstActivity.java改为了MenuTest.java

    、什么是Intent:

      1、Intent是Android程序中各组件之间进行交互的重要方式,不仅可以指明当前组件想要进行的动作,还能在不同组件之间传递数据

      2、Intent可被用于启动活动、启动服务、发送广播等场景

      3、Intent大致分为两种:显式Intent、隐式Intent

      4、简单的理解,Intent就是进行页面跳转,从一个手机页面跳转到另外一个手机页面

    二、显式Intent

      1、在创建一个activity活动:java源代码包---->New---->Activity----->Empty Activity

      2、Activity名称:SecondActivity,勾选Generate Layout File,不要勾选Launcher Activity

      3、新建完成后会自动生成Java源代码、layout布局文件、在AndroidManifest.xml中注册,在新生成的布局文件中再添加一个按钮

     

      4、在MenuTest主活动中修改点击事件的监听器

      Intent有许多构造函数,下面使用的是:Intent(Context packageContext,Class<?> cls),传入两个参数:

        Context:启动活动的上下文,即当前的活动,这里把MenuTest.this作为上下文传入

        Class:传入需要启动的活动,这里需要开启SecondActivity这个活动

      5、startActivity()方法专门用于启动目标活动,需要传入一个intent参数

     

      3、效果展示:点击button1按钮,页面跳转到button2的页面

      点击button1按钮前:

      点击button2按钮之后:

     

    三、隐式Intent

      1、隐式Intent:在<activity>标签中配置intent

      2、通过在<activity>标签中配置<intent-filter>的内容,可以知道当前活动能够响应的action和category,只有当AndroidManifest.xml中的<action>和<category>都同时匹配到Java源代码中Intent指定的action和category时,这个活动才会响应Intent(默认的category可以不在Java源代码中写出来)。

      3、在AndroidManifest.xml文件中的第二个activity活动标签中添加如下代码:

      com.example.administrator:包名

      android.intent.category.DEFAULT:一种系统默认的category,在调用startActivity()方法的时候会自动将这个category添加到Intent中

       4、在MenuTest.java中修改点击事件的监听器:

      因为“android.intent.category.DEFAULT”是系统默认的,会自动添加到Intent中,所以在Intent中可以不要写出

      5、程序运行效果:与显式Intent效果一样,正常显示。

    注意:

      在Java源代码中,每个Intent中只能指定一个action,但可以指定多个category,可以通过addCategory()方法来增加一个自定义的category,自定义的category必须要在<intent-filter>标签中声明,否则会报没有任何活动可以响应的错误信息

    在Java源代码中自定义一个category:

    在<activity>中声明自定义的category:

    四、更多隐式Intent的用法

      使用隐式Intent,不仅可以启动自己程序内的活动,还可以启动其他程序的活动,使得Android多个应用程序之间的功能共享成为了可能。比如说用自己的程序去打开百度网页。

    方法一:   

    在Java源代码的点击事件中写出如下代码,实现“点击按钮时,进行页面跳转,跳转到百度网页

    效果如下:

    点击按钮后进入百度网页:

     方法二:

     还可以在<intent-filter>标签中配置一个<data>标签,用于更精确地指定当前活动能够响应声明类型的数据,在<data>标签中可以配置以下内容:

    android:scheme   指定数据的协议部分,如:http

    android:host         指定数据的主机名部分,如:www.baidu.com

    android:port          指定数据的端口部分,一般紧随在主机名后面

    android:path         指定主机名和端口之后的部分,如一段网址中跟在域名之后的部分

    android:mimeType     指定可以处理的数据类型,允许使用通配符的方式进行指定。

    注意:只有<data>标签中指定的内容和Intent中携带的Date完全一致时,当前活动才能响应Intent,一般在<data>标签中不会指定过多的内容,如上面的示例中,只需要指定:

    android:scheme为http,就可以响应所以http协议的Intent了

      1、新建activity 

      2、创建button3

     

      3、修改注册信息:

    没有<category android:name="android.intent.category.BROWSABLE"/>程序也能正常运行,这个错误信息与AS环境及版本有关,是关于安全性的一个配置

    链接:Android中Acition和Category常量表:https://blog.csdn.net/gf771115/article/details/7827833

    运行结果如下:点击button1,弹出一个选项,选择Browser选项和JUST ONCE(或者ALWAYS),打开百度网页

     需要注意的是:虽然我们声明了ThirdActivity是可以响应打开网页的Intent的,但是实际上这个活动并没有加载和显示网页的功能,所以在真正的项目中尽量不要出现这种可能误导用户的行为,不然会让用户对我们的应用产生负面的印象。

    五、拓展

      除了http协议外,我们还可以 指定其他协议,比如:geo表示显示地理位置,tel表示拨打电话,下面的代码展示了如何在我们的程序中调用系统的拨号界面

      1、修改点击事件监听器的代码:

      2、效果如下:

    点击button1按钮后:

  • 相关阅读:
    刚下飞机——Alpha冲刺 总结随笔
    刚下飞机——Alpha冲刺Day10
    刚下飞机——Alpha冲刺Day9
    刚下飞机——Alpha冲刺Day8
    刚下飞机——Alpha冲刺Day7
    快乐就队——Beta冲刺(1/7)
    快乐就队——凡事预则立
    快乐就队——Alpha冲刺问题总结&事后诸葛亮
    快乐就队——换组记录
    快乐就队——Alpha冲刺总结
  • 原文地址:https://www.cnblogs.com/hh8888-log/p/9853025.html
Copyright © 2011-2022 走看看