Intent对象(组件间的通信原理)
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对象(组件间的通信原理)的更多相关文章
- ZeroMQ(java)之I/O线程的实现与组件间的通信
算是开始读ZeroMQ(java)的代码实现了吧,现在有了一个大体的了解,看起来实现是比较的干净的,抽象什么的不算复杂... 这里先来看看它的I/O线程的实现吧,顺带看看是如何实现组件的通信的.... ...
- vuejs单一事件管理组件间的通信
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 第四节:Vue表单标签和组件的基本用法,父子组件间的通信
vue表单标签和组件的基本用法,父子组件间的通信,直接看例子吧. <!DOCTYPE html> <html> <head> <meta charset=&q ...
- React中父子组件间的通信问题
1.https://blog.csdn.net/sinat_17775997/article/details/59103173 (React中父子组件间的通信问题)
- Vue2不使用Vuex如何实现兄弟组件间的通信
在一些正规的大型项目的企业级开发过程中我们一般会引入Vuex来对Vue所有组件进行状态管理,可以轻松实现各组件间的通信.但是有时候做做自己的小项目,没有必要使用Vuex时,如何简单的实现组件间的通信? ...
- (尚033)Vue_案例_slot(组件间的通信4:slot)
1.组件间的通信4:slot(slot:插槽,就是一个占位) slot用于标签反复使用很多次 1.1理解 此方式用于父组件向子组件传递标签数据, 其他为数据通信 外面组件向里面组件传递标签进去,直接拿 ...
- angular组件间的通信(父子、不同组件的数据、方法的传递和调用)
angular组件间的通信(父子.不同组件的数据.方法的传递和调用) 一.不同组件的传值(使用服务解决) 1.创建服务组件 不同组件相互传递,使用服务组件,比较方便,简单,容易.先将公共组件写在服务的 ...
- vue组件间的通信
组件的定义: 组件(Component)是 Vue.js 最强大的功能之一.组件可以扩展 HTML 元素,封装可重用的代码.在较高层面上,组件是自定义元素, Vue.js 的编译器为它添加特殊功能.v ...
- Vue.JS快速上手(组件间的通信)
前言 Vue采用的是组件化思想,那么这些组件间是如何通信的呢?下面详细介绍一下. 所谓组件间通信,不单单是我们字面上理解的相互传递数据,这里还包括一个组件访问另一个组件的实例方法等,如父组件通过ref ...
随机推荐
- VS发布到IIS Express外网Debug(如微信开发)
主要效果是本机调试网站,将网站发布到某域名(如m16758r728.iok.la),可以进入VS断点,不必再用远程调试!!! 环境 VS2015windows 10操作系统花生壳(可以用其他内网穿透的 ...
- WPF刷新界面
Winform 里有 Application.DoEvents();可刷新! WPF 里没这个,尽管可用委托实现多线程,但是刷新还是不行! 后来找到了 类似App.DoEvents()的方法(): 代 ...
- 在WPF中,如何得到任何Object对象的XAML代码?
原文:在WPF中,如何得到任何Object对象的XAML代码? 在WPF中,可以使用System.Windows.Markup.XamlWriter.Save(objName)得到任何Object对象 ...
- ASP 用隐藏域解决Http无状态问题
<!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml"><head> < ...
- iOS 自定义UIButton
工作中有一个点击button更新button上文案的需求,用自定义了button可以很简单的实现的这个需求 首先写个自定义的button CustomButton.h #import <UIKi ...
- 提示Windows Phone IP over USB Transport (IpOverUsbSvc)未运行,如何解决
原文:提示Windows Phone IP over USB Transport (IpOverUsbSvc)未运行,如何解决 uwp项目在安装测试时提示,"引导"Device&q ...
- Win10《芒果TV》更新v3.8.30流星版:优化稳定性、升级无边框播放体验
随着暑假到来,大波王牌综艺和青春电视剧热浪来袭,Win10版<芒果TV>全平台同步更新流星版v3.8.30,进一步提升稳定性,巩固播放体验,升级剧场模式和画中画无边框体验,我们在芒果等你. ...
- List<T>多字段排序的一个通用类
本文中的方法旨在解决通用的问题,非常注重效率的地方,还应该针对具体的类去写排序方法. 废话不多说,直接上代码 具体使用场景: 要排序的类 1 public class bb 2 { 3 public ...
- 解决win10开机出现recovery there was a problem with a device connected to your pc
问题描述: 开机无限重启并提示 recovery there was a problem with a device connected to your PC An unexpected I/O er ...
- MinGW和MSYS区别和关系以及MinGW&MSYS在Win7中安装并编译x264
http://blog.csdn.net/freeape/article/details/50555003