安卓基础之通过Intent跳转Activity
#### 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间传递数据:
从父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"); //传递的是什么数据类型,就按照传递的数据类型取
从子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要实现代码:
采用startActivityForRequest()方法而不是startActivity()
Intent intent=new Intent(this,TestActivity.class); //设置请求码,startActivityForResult(Intent intent,int requestcode)
startActivityForResult(intent,int requestcode);重写方法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的更多相关文章
- Intent 跳转Activity
Intent 跳转 显示跳转(用类名跳转) Intent i = new Intent(a.this,b.class); 隐士跳转 自定义Action <!--配置跳转Activity--> ...
- android中使用intent来实现Activity带数据跳转
大家都知道startActivity()是用来切换跳转Activity的.如果想要在另个Activity中出书数据的话.只需要在源activity中使用intent.putExtra()方法传出数据. ...
- [android]Intent跳转新的Activity可以传递数据过去
两种方式: 一,直接通过Bundle对象来传递: 如果我们想要给“收件人”Activity说点什么的话,那么可以通过下面这封“E-mail”来将我们的消息传递出去 Intent intent=new ...
- 安卓基础干货(六):安卓Activity的学习
AndroidManifest文件中的几个细节 结论: 1.一个应用程序可以创建多个桌面图标 2.创建快捷图标的方法: <intent-filter> //应用程序的入口 <acti ...
- 【Android基础】利用Intent在Activity之间传递数据
前言: 上一篇文章给大家聊了Intent的用法,如何用Intent启动Activity和隐式Intent,这一篇文章给大家聊聊如何利用Intent在Activity之间进行沟通. 从一个Activ ...
- [安卓基础] 007.管理Activity的生命周期
*:first-child { margin-top: 0 !important; } body > *:last-child { margin-bottom: 0 !important; } ...
- Android基础新手教程——4.1.3 Activity登堂入室
Android基础新手教程--4.1.3 Activity登堂入室 标签(空格分隔): Android基础新手教程 本节引言: 好的,在学习了两节的Activity后相信大家已经知道怎样去使用Acti ...
- Android基础新手教程——4.1.2 Activity初窥门径
Android基础新手教程--4.1.2 Activity初窥门径 标签(空格分隔): Android基础新手教程 本节引言: 上一节中我们对Activity一些主要的概念进行了了解,什么是Activ ...
- Android基础新手教程——4.1.1 Activity初学乍练
Android基础新手教程--4.1.1 Activity初学乍练 标签(空格分隔): Android基础新手教程 本节引言: 本节開始解说Android的四大组件之中的一个的Activity(活动) ...
随机推荐
- FFmpeg 学习(四):FFmpeg API 介绍与通用 API 分析
一.FFmpeg 相关术语 1. 容器/文件(Container/File):即特定格式的多媒体文件,比如MP4,flv,mov等. 2. 媒体流(Stream):表示在时间轴上的一段连续的数据,比如 ...
- 私有云的难处—为什么需要CloudEngine?
私有云的难处 ——我们为什么需要 CloudEngine? 郑昀 创建于2016/7/31 最后更新于2016/8/3 关键词: 容器.Docker.OpenStack.虚拟机.私有云.Mesos.配 ...
- 交叉编译 tcpdump
目录 1. 下载 tcpdump 2. 交叉编译 3. 相关说明 1. 下载 tcpdump 官网:http://www.tcpdump.org/ 2. 交叉编译 交叉编译libpcap: $ wge ...
- Java数据结构与算法 - 外部存储
Q: 什么是外部存储? A: 外部存储特指某类磁盘系统,例如在大多数台式电脑或服务器中的硬盘. Q: 如何访问外部存储? A: 我们所学的数据结构都是假设数据存储在内存中,但是,在很多情况下要处理的数 ...
- android自动化必备之SDK
进入到SDK包中,通过打开SDK manager.exe即可看到SDK管理界面,可能部分童靴发现一直在加载出不来,我们需要设置代理来解决: 选择工具栏上的Tools->Options打开如下窗口 ...
- Python——day14 三目运算、推导式、递归、匿名、内置函数
一.三目(元)运算符 定义:就是 if...else...语法糖前提:简化if...else...结构,且两个分支有且只有一条语句注:三元运算符的结果不一定要与条件直接性关系 cmd = input ...
- Python内置函数(7)——bytearray
英文文档: class bytearray([source[, encoding[, errors]]]) Return a new array of bytes. The bytearray cla ...
- Java核心技术及面试指南 多线程并发部分的面试题总结以及答案
7.2.10.1有T1.T2.T3三个线程,如何保证T2在T1执行完后执行,T3在T2执行完后执行? 用join语句,在t3开始前join t2,在t2开始前join t1. 不过,这会破坏多线程的并 ...
- 如何阅读jdk源码?
简介 这篇文章主要讲述jdk本身的源码该如何阅读,关于各种框架的源码阅读我们后面再一起探讨. 笔者认为阅读源码主要包括下面几个步骤. 设定目标 凡事皆有目的,阅读源码也是一样. 从大的方面来说,我们阅 ...
- qt 窗口鼠标穿透
Qt 不规则窗体 – 鼠标点击穿透 qt实现鼠标穿透,如果要被穿透窗口只有一层,也即没有嵌套窗口,直接只用对子窗口使用setAttribute (Qt::WA_TransparentForMouseE ...