Android组件之间的信使——Intent

从一个Activity启动到另一个Activity可以使用startActivity()方法或者是startActivityForResult()方法

第一种:直接启动一个Activity
Intent intent = new Intent(Main.this, SecondActivity.class);
startActivity(intent);

第二种:启动另一个Activity并返回结果
作用:当从第二个Activity回跳到前一个Activity的时候,就不再需要使用startActivity,也就是说不用两次使用startActivity方法
startActivityForResult(Intent intent, Int requestCode)
intent 传给要跳转的Activity的数据和动作

requestCode >=0就好,随便用于在onActivityResult()区别哪个子模块回传的数据,如果还有C.java ,D甚至E子模块的话,每个区分开不同的requestCode就好。

Java代码  

  1. public class MainActivity extends Activity {
  2. /** Called when the activity is first created. */
  3. @Override
  4. public void onCreate(Bundle savedInstanceState) {
  5. super.onCreate(savedInstanceState);
  6. setContentView(R.layout.main);
  7. //给按钮添加绑定的事件
  8. Button myButton = (Button)findViewById(R.id.myButton);
  9. myButton.setText("我的第一个Button");
  10. myButton.setOnClickListener(new OnClick());
  11. }
  12. @Override
  13. protected void onActivityResult(int requestCode, int resultCode, Intent data) {
  14. System.out.println(requestCode);
  15. System.out.println(resultCode);
  16. }
  17. public class OnClick implements OnClickListener{
  18. @Override
  19. public void onClick(View v) {
  20. //生成一个Intent对象
  21. Intent intent = new Intent();
  22. intent.putExtra("testIntent", "testExtra");
  23. intent.setClass(MainActivity.this,SecondActivity.class);
  24. //直接启动一个Activity
  25. //              startActivity(intent);
  26. //启动一个有返回值的Activity
  27. startActivityForResult(intent, 2);
  28. }
  29. }
  30. }

setResut(int resultCode, Intent intent)
resultCode如果跳转的Activity子模块可能有几种不同的结果返回,可以用这个参数予以识别区分。这里还有个特殊的RESULT_OK值,没有特殊情况用它就好了,sdk有说明的。
intent 继续不解释,传回给A的onActivityResult()

onActivityResult(int requestCode, int resultCode, Intent intent)
这里三个都不用解释了,与上文对应的东西。如果不对requestCode和resultCode 加以识别区分的话,只要有其他activity setResult到了A  onActivityResult()会无差别处理

Java代码  

  1. public class SecondActivity extends Activity{
  2. @Override
  3. protected void onCreate(Bundle savedInstanceState) {
  4. // TODO Auto-generated method stub
  5. super.onCreate(savedInstanceState);
  6. this.setContentView(R.layout.other);
  7. Button btn = (Button)findViewById(R.id.otherButton);
  8. btn.setOnClickListener(new Button.OnClickListener(){
  9. @Override
  10. public void onClick(View v) {
  11. Intent intent = getIntent();
  12. setResult(3, intent);
  13. finish();
  14. }
  15. });
  16. }
  17. }

如何使用自定义的Action属性?
1、定义一个自定义的Action名称——常量

Java代码  

  1. public static final String MY_ACTION = "hb.com.MY_ACTION";

2、使用一个按钮然后给其绑定事件,让它跳转到另一个Activity

Java代码  

  1. myActionBtn.setOnClickListener(new Button.OnClickListener(){
  2. @Override
  3. public void onClick(View v) {
  4. System.out.println("myActionBtn");
  5. //                  Intent intent = getIntent();
  6. // 这里一定要new一个Intent对象,如果用上面的则打开的是当前的Activity
  7. Intent intent = new Intent();
  8. intent.setAction(MY_ACTION);
  9. startActivity(intent);
  10. }
  11. });

3、在AndroidManifest.xml配置文件中添加Activity的名称

Xml代码  

  1. <activity android:name=".SecondActivity" android:label="@string/secondActivity">
  2. <intent-filter>
  3. <action android:name="hb.com.MY_ACTION" />
  4. <category android:name="android.intent.category.DEFAULT" />
  5. </intent-filter>
  6. </activity>

备注:hb.com.MY_ACTION这个值与intent.setAction(MY_ACTION);值是一样的
activity标签在application标签内部
category这个属性在Intent Filter中必须出现,否则不能测试通过

Intent的Data属性是指定动作的URI和MIME类型,不同的Action有不同的Data数据指定
Intent中的Category属性是一个执行Action的附加信息
Intent的Extras属性是添加一些组件的附加信息

Java代码  

  1. //显示_id为1的联系人信息
  2. data = "content://contacts/people/1";
  3. uri = Uri.parse(data);
  4. //ACTION_VIEW显示数据给用户
  5. intent.setAction(Intent.ACTION_VIEW);
  6. intent.setData(uri);
  7. startActivity(intent);
  8. //编辑_id为1的联系人信息
  9. data = "content://contacts/people/1";
  10. uri = Uri.parse(data);
  11. //ACTION_EDIT显示可编辑数据
  12. intent.setAction(Intent.ACTION_EDIT);
  13. intent.setData(uri);
  14. startActivity(intent);
  15. //显示拨打电话的界面
  16. data = "tel:13811111111";
  17. uri = Uri.parse(data);
  18. //ACTION_DIAL显示拨打电话的面板
  19. intent.setAction(Intent.ACTION_DIAL);
  20. intent.setData(uri);
  21. startActivity(intent);
  22. //直接拨打电话
  23. data = "tel:13811111111";
  24. uri = Uri.parse(data);
  25. //ACTION_CALL直接打电话
  26. intent.setAction(Intent.ACTION_CALL);
  27. intent.setData(uri);
  28. startActivity(intent);
  29. //访问浏览器
  30. data = "http://www.baidu.com";
  31. uri = Uri.parse(data);
  32. //ACTION_VIEW显示数据给用户
  33. intent.setAction(Intent.ACTION_VIEW);
  34. intent.setData(uri);
  35. startActivity(intent);
  36. //访问地图
  37. data = "geo://39.92,116.46";
  38. uri = Uri.parse(data);
  39. //ACTION_VIEW显示数据给用户
  40. intent = new Intent(Intent.ACTION_VIEW,uri);
  41. startActivity(intent);

<intent-filter>列表中的action不能为空,否则程序阻塞不能通过。
如果Intent对象指定了一个Action属性,那么要想通过Action测试,Intent对象指定的属性必须和Intent Filter中的匹配,否则不能通过测试。
如果Intent对象中没有指定Action属性,则自动通过测试。

Android组件之间的信使——Intent,布布扣,bubuko.com

时间: 2024-12-26 01:37:47

Android组件之间的信使——Intent的相关文章

使用Broadcast实现android组件之间的通信

android组件之间的通信有多种实现方式.Broadcast就是当中一种. 在activity和fragment之间的通信,broadcast用的很多其它本文以一个activity为例. 效果如图: 布局文件: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" andro

我的Android 4 学习系列之Intent 和 Broadcast Reciever

目录 Intent 简介 使用隐式和显式Intent启动Activity.子Acitivity和Service 使用Linkify 使用Broadcast Intent 广播事件 使用 Pending Intent Intent Filter 和 Broadcast Reciever 简介 使用 Intent Filter 扩展应用程序的功能 监听 Broadcast Intent 监听设备状态改变 在运行时管理manifest Reciever Intent简介 Intent是一种消息传递机制

Android组件Broadcast Receiver学习

Android大量使用了Broadcast Receiver来广播系统事件,如网络连接.扩展dock状态及来电的变化. 一.注意: android 中service和broadcastreceiver都是运行在主UI线程中,如果在他们中执行耗时操作,若果操作持续的时间超过android平台的约定,那么android平台会认为该程序出现异常,从而抛出ANR异常.如果在onReceive()的处理中,用户进行了UI触发,将可能引发ANR异常,不过和activity的时间限制不同,receiver在1

Android组件化最佳实践 ARetrofit原理

简介 ARetrofit是一款针对Android组件之间通信的框架,实现组件之间解耦的同时还可以通信. 源码链接:https://github.com/yifei8/ARetrofit欢迎star.issues.fork 组件化 Android组件化已经不是一个新鲜的概念了,出来了已经有很长一段时间了,大家可以自行Google,可以看到一堆相关的文章. 简单的来说,所谓的组件就是Android Studio中的Module,每一个Module都遵循高内聚的原则,通过ARetrofit来实现无耦合

Android实现组件之间同步的回调通信

Android开发中,有时会遇到组件之间相互通信回调的问题.一般都是通过Android提供的ResultReceiver来实现(ResultReceiver的使用方法很简单,这里就不多提了). 但之前在工作中,遇到了一个组件间回调的问题,ResultReceiver无法满足需求.简单描述一下问题:service中打开了一个activity,activity需要将一个变量值回调给service,而且这个回调必须是同步的.也就是说activity在确认service接收到了这个变量值后,才能继续向下

Android应用程序组件之间的通信Intent和IntentFilter

Android应用程序的基本组件,这些基本组建除了Content Provider之外,几乎全部都是依靠Intent对象来激活和通信的. 下面介绍Intent类,并通过例子来说明Intent一般用法 1.1 Intent类简介 Intent类的对象是组件间通信的载体,组件之间进行通信就是一个个Intent对象在不断地传递.Intent对象主要作用于运行在相同或不同应用程序的Activity,Service和Broadcast Receiver组件之间,对于这3种组件,其作用机制也不相同 一,对于

Android组件系列----Intent详解

[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/3959204.html 联系方式:[email protected] [正文] Intent组件虽然不是四大组件,但却是连接四大组件的桥梁,学习好这个知识,也非常的重要. 一.什么是Intent 1.Intent的概念: Android中提供了Intent机制来协助应用间的交互与通讯,或者采用更准确

Android组件的通讯——Intent

转载:Android组件的通讯-Intent 1.概述 一个应用程序的三个核心组件——activities.services.broadcast receivers,都是通过叫做intents的消息激活.Intent消息是一种同一或不同应用程序中的组件之间延迟运行时绑定的机制.intent本身(是一个Intent对象),是一个被动的数据结构保存一个将要执行的操作的抽象描述,或在广播的情况下,通常是某事已经发生且正在宣告.对于这三种组件,有独立的传送intent的机制: Activity:一个in

android学习四---Activity和Intent

1.android项目资源深入了解 在深入学习android之前,先好好玩玩手机上的应用,大部分程序都有一个图标,点开图标,程序启动,一定时间后,程序会跳转到第一个界面,比如手机QQ,点开图标,会跳出一幅图,接着就跳到QQ登陆的界面(如下图).这个界面里有输入框输入QQ号码,密码,有个登陆按钮,有记住密码选择框,还有一些图标和文本.如果你输入了密码和账号后,点击登陆,程序就会响应.发送到服务器端会检查账号,密码.账号密码一致的话就会就会跳到用户界面. 假设需要实现这样的一个界面,对应的andro