Intent对象是一种可以在运行时动态绑定组件的关键技术,通过使用Intent对象,可以告诉系统你想要实现什么样的操作,也就是Intent对象里面包含的请求内容,请求再由Android操作系统接收到,然后到IntentFilter过滤器中找到已经注册的组件,再调用这个组件就完成了组件间通信的过程。

Intent对象描述的基本内容:1、componentName组件的名称; 2、Action动作名称; 3、Data数据;  4、Category类别; 5、Extra附加数据; 6、Flag标志位

1、显示调用:指定了componentName组件名称。两个Activity和两个xml。

Main.java:

Intent intent = new Intent();

intent.setClass(Main.this,Second.class);

Main.this.startActivity(intent);

2、隐式调用:没有明确指出目标组件名称的情况。Android系统要使用IntentFilter过滤器来寻找与隐式Intent相匹配的组件对象,匹配的成功与否与3个元素有关,分别是“action”,“category”,“data”。一个隐式的Intent调用必须通过这3个元素的匹配检查,如果检查成功则成功匹配,如果检查失败则不匹配。这个IntentFilter要在AndroidManifest.xml文件中进行注册,并且至少有一个<action>元素,如果没有则任何的Intent都不匹配。

1)Extra附加数据与静态广播BroadcastReceiver的Dome:

Main.java:

Intent intent = new Intent("test");(test为创建的项目名)

intent.putExtra("sendText","hello world");

Main.this.sendBroadcast(intent);

接受类:BroadcastReceiver.java:

void onReceive(Context arg0,Intent arg1)

Toast.makeText(arg0,arg1.getStringExtra("sendText"),Toast.LENGTH_LONG).show;

AndroidManifest.xml:

<receiver android:name = ".BroadcastReceiver">

<intent-filter>

  <action android:name = "test"></action>

</intent-filter>

</receiver>

2)Extra附加数据与动态广播BroadcastReceiver的Dome:

Main.java:

private IntentFilter myIntent = new IntentFilter();

private MyBroadCast MyBroadCast = new MyBroadCast();

public void onCreat(Bundle savedInstanceState){

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

myIntent.addAction("BroadCast");

registerRecevier(MyBroadCast,myIntent);

Button button = (Button)findViewById(R.id.button);

button onClick:

Intent newIntent = new Intent();

newIntent.putExtra("username","hello world");

newIntent.setAction("BroadCast");

Main.this.sendBroadcast(newIntent);

protected void onStop(){

  unregisterReceiver(MyBroadCast);

}

3)不用广播的Intent隐式

两个Activity(Main,Second)两个xml(一个button)

Main.java:

button:onClick

Intent newIntent = new  Intent("ActionName");

Main.this.startActivity(newIntent);

第二个Activity没有添加内容。

Manifest.xml:

<activity android:name = ".Second" android:label = "@string/app_name">

<intent-filter>

  <action android:name = "ActionName"/>

  <category android:name = "android.intent.categroy.DEFAULT"/>

</intent-filter>

</activity>

4)使用系统自带的ActionName动作

略。(下面有)

注意在manifest中添加权限。

3、指定Action的动作名称和Data数据(这个是上面4)的详细版,加了数据)

Dome:

Uri uri = Uri.parse("http://www.baidu.com");

Intent intent = new Intent(Intent.ACTION_VIEW,uri);

Main.this.startActivity(intent);

(先到这儿)

Intent对象(组件间的通信原理)的更多相关文章

  1. ZeroMQ(java)之I/O线程的实现与组件间的通信

    算是开始读ZeroMQ(java)的代码实现了吧,现在有了一个大体的了解,看起来实现是比较的干净的,抽象什么的不算复杂... 这里先来看看它的I/O线程的实现吧,顺带看看是如何实现组件的通信的.... ...

  2. vuejs单一事件管理组件间的通信

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  3. 第四节:Vue表单标签和组件的基本用法,父子组件间的通信

    vue表单标签和组件的基本用法,父子组件间的通信,直接看例子吧. <!DOCTYPE html> <html> <head> <meta charset=&q ...

  4. React中父子组件间的通信问题

    1.https://blog.csdn.net/sinat_17775997/article/details/59103173 (React中父子组件间的通信问题)

  5. Vue2不使用Vuex如何实现兄弟组件间的通信

    在一些正规的大型项目的企业级开发过程中我们一般会引入Vuex来对Vue所有组件进行状态管理,可以轻松实现各组件间的通信.但是有时候做做自己的小项目,没有必要使用Vuex时,如何简单的实现组件间的通信? ...

  6. (尚033)Vue_案例_slot(组件间的通信4:slot)

    1.组件间的通信4:slot(slot:插槽,就是一个占位) slot用于标签反复使用很多次 1.1理解 此方式用于父组件向子组件传递标签数据, 其他为数据通信 外面组件向里面组件传递标签进去,直接拿 ...

  7. angular组件间的通信(父子、不同组件的数据、方法的传递和调用)

    angular组件间的通信(父子.不同组件的数据.方法的传递和调用) 一.不同组件的传值(使用服务解决) 1.创建服务组件 不同组件相互传递,使用服务组件,比较方便,简单,容易.先将公共组件写在服务的 ...

  8. vue组件间的通信

    组件的定义: 组件(Component)是 Vue.js 最强大的功能之一.组件可以扩展 HTML 元素,封装可重用的代码.在较高层面上,组件是自定义元素, Vue.js 的编译器为它添加特殊功能.v ...

  9. Vue.JS快速上手(组件间的通信)

    前言 Vue采用的是组件化思想,那么这些组件间是如何通信的呢?下面详细介绍一下. 所谓组件间通信,不单单是我们字面上理解的相互传递数据,这里还包括一个组件访问另一个组件的实例方法等,如父组件通过ref ...

随机推荐

  1. redis 从0到1 linux下的安装使用 数据类型 以及操作指令 一

    安装 redis 到 /usr/目录下 我这里安装的是redis-3.2.9.tar.gz tar zxvf  redis-3.2.9.tar.gz  -C  /usr 然后进行 执行编译命令 mak ...

  2. Delphi多线程下的ADO编程

    前言: 几个月前接到一个任务:将一后台程序访问数据库的方式从BDE改为ADO,原因是由于业务量的增加,通过BDE不论是向数据库写入数据还是从数据库中读出数据的速度都变得无法忍受,大家都知道ADO在数据 ...

  3. x名称空间中的内容

    原文:x名称空间中的内容 x名称空间映射的是http://schemas.microsoft.com/winfx/2006/xaml,它包含的类均与XAML的解析有关,下面分三部分介绍 一:x名称空间 ...

  4. Thinkphp模板开放给第三方编辑权限时,如何禁止模板使用php代码

    首先我要吐槽一个问题:为什么在博客园发布的文章总是被其他网站采集过去,而他们采集过去后,排名比博客园还好,比如这篇文章,我把标题复制到百度搜索,结果第一页的搜索结果全部都是采集我的,而我在博客园发布的 ...

  5. C++成员函数指针错误用法警示(成员函数指针与高性能的C++委托,三篇),附好多评论

    今天做一个成绩管理系统的并发引擎,用Qt做的,仿照QtConcurrent搞了个模板基类.这里为了隐藏细节,隔离变化,把并发的东西全部包含在模板基类中.子类只需注册需要并发执行的入口函数即可在单独线程 ...

  6. Win8Metro(C#)数字图像处理--2.32图像曝光算法

    原文:Win8Metro(C#)数字图像处理--2.32图像曝光算法  [函数名称] 图像曝光函数ExposureProcess(WriteableBitmap src,int exposureV ...

  7. Win8Metro(C#)数字图像处理--2.15图像霓虹效果

    原文:Win8Metro(C#)数字图像处理--2.15图像霓虹效果  [函数名称] 图像霓虹效果函数NeonProcess(WriteableBitmap src) 上述公式进行开方即可. [函 ...

  8. GIS基础软件及操作(五)

    原文 GIS基础软件及操作(五) 练习五.空间分析的基本操作 空间分析的基本操作 空间分析模块 空间分析是基于地理对象的位置和形态的空间数据的分析技术,其目的在于提取和传输空间信息.空间分析是地理信息 ...

  9. 微信小程序把玩(十七)input组件

    原文:微信小程序把玩(十七)input组件 input输入框使用的频率也是比较高的...样式的话自己外面包裹个view自己定义.input属性也不是很多,有需要自己慢慢测,尝试 主要属性: wxml ...

  10. CentOS7 无法使用yum命令,无法更新解决方法

    前言 设置网卡开机自动启动 设置国内dns服务器系统 修改CentOS-Base.repo中的地址 所参考的文章地址 前言 刚安装完的CentOS7的系统,发现无法使用yum命令进行更新,在更新的时候 ...