#### Intent的用途:

  • Intent可以启动其他组件,如Activity以及Service.并且在启动一个新的组件或者被启动组件返回时,都可以使用Intent携带信息,传递数据.
  • Intent的另一个用途是在Android系统上发布信息.广播信息可以是程序内部信息,也可以是第三方程序信息,系统信息.应用程序通过注册Intent过滤器可以获得这些广播消息.

总结:Intent可以用于组件之间的数据交换和发送广播消息.

利用Intent启动Activity:

使用Intent启动Activity有两种方式:

  • 隐式启动:通过指定一组动作,和数据实现
Intent intent=new Intent(String action, Uri uri);
startActivity(intent); //如果需要设置mimetype类型(不懂就暂时忽略,继续看,下文解析)
Intent intent=new Intent();
intent.setAction("");
intent.addCatogary("");
intent.setDataAndType("",""); //或者intent.setData,具体根据清单文件配置
startActivity(intent);
  • 显示意图:通过指定具体的activity实现
Intent intent=new Intent(this,TestActivity.class);
startActivity(intent);

拓展:在隐式启动Activity的过程中,既然没有指定特定的Activity类,那么android系统就应该是通过Intent中的action,category,data信息匹配符合条件的Activity启动的.这个过程是如何匹配的呢?

当隐式意图发送后,系统会筛选每个应用的AndroidManifest.xml的组件下定义的节点

        <activity android:name=".ListActivity" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
<data android:host="" android:scheme="" android:mimeType=""></data>
</intent-filter>
</activity>

如果节点中的action,category,data信息与Intent中的匹配,该应用组件就作为制定Activity启动了.

例如:利用隐式意图跳转默认浏览器打开网页

Intent intent=new Intent();
String s=new String("https://www.artic.edu/collection?is_public_domain=1");
intent.setData(Uri.parse(s));
intent.setAction(Intent.ACTION_VIEW);
startActivity(intent);

#### 利用意图在Activity间传递数据:

  1. 从父Activity传递数据到子Activity

    父Activity要实现代码:

    String name="eason";
    Intent intent=new Intent(this,TestActivity.class);
    intent.putExtra("name",name); //Activity间数据传递的方法
    startActivity(intent);

    子Activity要实现代码:

    Intent intent=getIntent();
    String name=intent.getStringExtra("name"); //传递的是什么数据类型,就按照传递的数据类型取
  2. 从子Activity传递数据到父Activity

    在TestActivity.class页面中点击按钮把选中号码返回,

    子Activity要实现代码:

    public void onclick(View view){
    Intent intent=new Intent();
    String phone="123";
    intent.putExtra("phone",phone);
    setResult(int RuasultCode,intent);
    finish(); //该方法将结束当前Activity,返回唤醒该Activity的Activity
    }

    父Activity要实现代码:

    1. 采用startActivityForRequest()方法而不是startActivity()

      Intent intent=new Intent(this,TestActivity.class);
      
      //设置请求码,startActivityForResult(Intent intent,int requestcode)
      startActivityForResult(intent,int requestcode);
    2. 重写方法onActivityResult()

      //该方法在TestActivity关闭时调用
      protected void onActivityResult(int requestCode,int resultCode,Intent data){
      //通过请求码或者结果码,可以辨别返回数据的来源
      if(resultCode==){
      }
      }

#### 利用Intent发送广播

Intent intent=new Intent("android.intent.action.NEW_OUTGOING_CALL");
intent.puExtra("message",String string);

#### 利用broadcastReceiver接收广播事件

与Activity的使用类似,想利用BroadcastReceiver接收广播,需要建立一个子类继承BroadcastReceiver,并且在清单文件中声明recevier.

假如现在要建立一个监听外拨电话的广播事件,那么首先要在包下兴建一个子类继承BroadcastReceiver

public class IpRecevier extends BroadcastReceiver {
@Override
//该方法将在接受到广播时调用
public void onReceive(Context context, Intent intent) {
String string=intent.getStringData("message");
System.out.print(string);
}

然后需要在清单文件中声明新建的子类:

<Application...
<receiver android:name="自定义子类名">
<intent-filter>
<action android:name="android.intent.action.NEW_OUTGOING_CALL"> </action>
</intent-filter>
</receiver>

正常情况下,只需要添加想检测事件的action就可以了,有两个广播事件需要添加数据约束.

1.检测sd卡挂载的广播事件,sd卡存的是file,所以添加约束类型"file"

        <receiver android:name="com.example.eason.news.IpRecevier">
<intent-filter>
<action android:name="android.intent.action.MEDIA_MOUNTED"></action>
<data android:scheme="file"/>
</intent-filter>
</receiver>

2.检测应用的安装,卸载,应用安装和卸载的文件类型是包,所以添加约束类型"package"

        <receiver android:name="com.example.eason.news.IpRecevier">
<intent-filter>
<action android:name="android.intent.action.PACKAGE_ADDED"></action>
<action android:name="android.intent.action.MEDIA_REMOVED"></action>
<data android:scheme="package"/>
</intent-filter>

安卓基础之通过Intent跳转Activity的更多相关文章

  1. Intent 跳转Activity

    Intent 跳转 显示跳转(用类名跳转) Intent i = new Intent(a.this,b.class); 隐士跳转 自定义Action <!--配置跳转Activity--> ...

  2. android中使用intent来实现Activity带数据跳转

    大家都知道startActivity()是用来切换跳转Activity的.如果想要在另个Activity中出书数据的话.只需要在源activity中使用intent.putExtra()方法传出数据. ...

  3. [android]Intent跳转新的Activity可以传递数据过去

    两种方式: 一,直接通过Bundle对象来传递: 如果我们想要给“收件人”Activity说点什么的话,那么可以通过下面这封“E-mail”来将我们的消息传递出去 Intent intent=new ...

  4. 安卓基础干货(六):安卓Activity的学习

    AndroidManifest文件中的几个细节 结论: 1.一个应用程序可以创建多个桌面图标 2.创建快捷图标的方法: <intent-filter> //应用程序的入口 <acti ...

  5. 【Android基础】利用Intent在Activity之间传递数据

    前言: 上一篇文章给大家聊了Intent的用法,如何用Intent启动Activity和隐式Intent,这一篇文章给大家聊聊如何利用Intent在Activity之间进行沟通.   从一个Activ ...

  6. [安卓基础] 007.管理Activity的生命周期

    *:first-child { margin-top: 0 !important; } body > *:last-child { margin-bottom: 0 !important; } ...

  7. Android基础新手教程——4.1.3 Activity登堂入室

    Android基础新手教程--4.1.3 Activity登堂入室 标签(空格分隔): Android基础新手教程 本节引言: 好的,在学习了两节的Activity后相信大家已经知道怎样去使用Acti ...

  8. Android基础新手教程——4.1.2 Activity初窥门径

    Android基础新手教程--4.1.2 Activity初窥门径 标签(空格分隔): Android基础新手教程 本节引言: 上一节中我们对Activity一些主要的概念进行了了解,什么是Activ ...

  9. Android基础新手教程——4.1.1 Activity初学乍练

    Android基础新手教程--4.1.1 Activity初学乍练 标签(空格分隔): Android基础新手教程 本节引言: 本节開始解说Android的四大组件之中的一个的Activity(活动) ...

随机推荐

  1. [Swift]LeetCode400. 第N个数字 | Nth Digit

    Find the nth digit of the infinite integer sequence 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, ... Note:n is ...

  2. [Swift]LeetCode834. 树中距离之和 | Sum of Distances in Tree

    An undirected, connected tree with N nodes labelled 0...N-1 and N-1 edges are given. The ith edge co ...

  3. PHP实现用户注册并保存数据到文件

    首先我们实现功能时,分析实现的步骤是什么,就这个而言,我们应该接收用户提交的数据并进行校验,然后保存在文件,最后给用户反馈. 这里需要注意的是为了避免嵌套过深,这里使用自定义函数来实现,其代码如下: ...

  4. shell 删除重复文件脚本

    摘自 <Linux Shell脚本攻略>一书,例子在109页,原理在110页,原理讲解的很好哦! 需要了解awk命令.xargs,脚本中所用的命令在Linux Shell脚本攻略一书中都有 ...

  5. logback.xml sql语句输出

    在使用springBoot框架之后,日志配置文件变成了logback.xml,输出sql语句的方法为: <!-- 打印sql语句 --> <logger name="com ...

  6. TLS 1.3 VS TLS 1.2,让你明白 TLS 1.3 的强大

    HTTPS 加密时代已经来临,近两年,Google.Baidu.Facebook 等互联网巨头,不谋而合地开始大力推行 HTTPS, 2018 年 7 月 25 日,Chrome 68 上线,所有 H ...

  7. asp.net core系列 33 EF查询数据 (2)

    一. 原生SQL查询 接着上篇讲.通过 Entity Framework Core 可以在使用关系数据库时下降到原始 SQL 查询. 在无法使用 LINQ 表达要执行的查询时,或因使用 LINQ 查询 ...

  8. 记一次查询超时的解决方案The timeout period elapsed......

    问题描述 在数据库中执行查询语句,大约1秒钟查询出来,在C#中用ado进行连接查询,一直等待很久未查出结果,最后抛出查询超时异常. 异常内容如下: Execution Timeout Expired. ...

  9. 痞子衡嵌入式:第一本Git命令教程(3)- 变动(status/diff)

    今天是Git系列课程第三课,前两课我们都是在做Git仓库准备工作,今天痞子衡要讲的是如何查看Git空间内发生的改动. 本地有了仓库,我们便可以在仓库所在目录下做文件增删改操作,为了确定改动操作的正确性 ...

  10. 结识hybrid体验这一年

    在这之前虽然看过一些博客介绍 hybrid,但是始终没有具体应用场景,想象的就是我现在做好了一个网站,然后 native 直接在 webview 中打开我的网站,类似浏览器中打开网站一样,头部添加一个 ...