Android应用程序中组件之间的通信都少不了Intent的使用,Intent负责对应用中一次操作的动作、动作涉及数据、附加数据进行描述,Android则根据此Intent的描述,负责找到对应的组件,将 Intent传递给调用的组件,并完成组件的调用。intent就是意图的意思。Intent分两种:显式(Explicit intent)和隐式(Implicit intent)。

显示调用Intent

简单的Demo从一个Activity转到另外一个Aactivity:

Mainactivity的布局文件

    <EditText
android:id="@+id/edt_content"
android:layout_width="match_parent"
android:layout_height="wrap_content" /> <Button
android:id="@+id/btn_login"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/edt_content"
android:onClick="login"
android:text="查询" />

 Mainactivity中调用点击事件:

EditText  contentEditText=(EditText) findViewById(R.id.edt_content);
Intent intent=new Intent(this,PersonActivity.class);
intent.putExtra(EXTRA,contentEditText.getText().toString());
startActivity(intent);

  这个时候的Intent就是显示调用,直接指定了接收参数的Activity,可以唯一确定一个Activity,意图特别明确,这个时候需要在PersonActivity接收参数:

public class PersonActivity extends Activity {

	@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_person);
TextView textView=(TextView) findViewById(R.id.txt_content);
Intent intent=getIntent();
String str=intent.getStringExtra(MainActivity.EXTRA);
textView.setText(str);
textView.setTextSize(20);
textView.setTextColor(Color.RED); }

另外这个时候传递的参数使用的方法是putExtra,如果传递的参数比较多可以使用Bundle类似于map。

隐式调用

隐式,即不是像显式的那样直接指定需要调用的Activity,隐式不明确指定启动哪个Activity,而是设置Action、Data、Category,让系统来筛选出合适的Activity。筛选是根据所有的<intent-filter>来筛选。

这个时候需要在AndroidManifest.xml中设置一下intent-filter中去设置一下,如下,Category直接使用默认的就行:

    <intent-filter>
<action android:name="com.example.googleone.Peson" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>

 Mainactivity中的调用使用,这个时候的调用:

  Intent intent=new  Intent("com.example.googleone.Peson");
startActivity(intent);

 这个自己定义的Action字符串可以调用自身程序的Activity,还可以其他应用程序的Action,比如说常用的拨号面板:

	Intent intent = new Intent(Intent.ACTION_DIAL);
startActivity(intent);

如果这个时候在AndroidManifest.xml文件中给PersonActivity, 加一个Action,如下:

  <activity
android:name=".PersonActivity"
android:label="@string/title_activity_person" >
<intent-filter>
<action android:name="android.intent.action.DIAL"/>
<action android:name="com.example.googleone.Peson" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>

Mainactivity中的调用:

	Intent intent=new Intent(Intent.ACTION_DIAL);
if(intent.resolveActivity(getPackageManager()) == null)
{
view.setEnabled(false);
}
try {
startActivity(intent);
} catch (ActivityNotFoundException e) {
// TODO Auto-generated catch block
Toast.makeText(this,"找不到对应的Activity",Toast.LENGTH_SHORT).show();
}

结果如图所示:

  

Intent.ACTION_DIAL是系统常量字符串,等价于android.intent.action.DIAL,调用的时候通过这个action的名称,去寻找具有这个action的activity~

Android中Intent的显示和隐式使用的更多相关文章

  1. Intent 显示意图 隐式意图

    //显式意图  :必须指定要激活的组件的完整包名和类名 (应用程序之间耦合在一起) // 一般激活自己应用的组件的时候 采用显示意图  //隐式意图: 只需要指定要动作和数据就可以 ( 好处应用程序之 ...

  2. 为什么在注册和注销的时候intent要改成隐式调用

    显式意图:调用Intent.setComponent()或Intent.setClass()方法明确指定了组件名的Intent为显式意图,显式意图明确指定了Intent应该传递给哪个组件. 隐式意图: ...

  3. Android中Intent具体解释(一)

    Intent是一种消息传递机制.它能够在应用程序内使用,也能够在应用程序间使用,主要用途分为: 1.使用类名显示的启动一个特定的Activity或Service 2.启动Activity或Servic ...

  4. Android中Intent传值与Bundle传值的区别详解

    Android中Intent传值与Bundle传值的区别详解 举个例子我现在要从A界面跳转到B界面或者C界面   这样的话 我就需要写2个Intent如果你还要涉及的传值的话 你的Intent就要写两 ...

  5. Android中Intent传递对象的两种方法(Serializable,Parcelable)

    今天要给大家讲一下Android中 Intent中如何传递对象,就我目前所知道的有两种方法,一种是Bundle.putSerializable(Key,Object);另一种是 Bundle.putP ...

  6. [转]Android中Intent传递对象的两种方法(Serializable,Parcelable)

    http://blog.csdn.net/xyz_lmn/article/details/5908355 今天要给大家讲一下Android中Intent中如何传递对象,就我目前所知道的有两种方法,一种 ...

  7. Android中intent如何传递自定义数据类型

    转载自:http://www.cnblogs.com/GoAhead/archive/2012/07/16/2593868.html 大家好,好久不见,今天要给大家讲一下Android中Intent中 ...

  8. (4.19)sql server中的事务模式(隐式事务,显式事务,自动提交事务)

    (4.19)sql server中的事务模式(隐式事务,显式事务,自动提交事务) 1.概念:隐式事务,显式事务,自动提交事务 2.操作:如何设置事务模式 3.存储过程中的事务 XACT_ABORT 1 ...

  9. Android高手进阶教程(十七)之---Android中Intent传递对象的两种方法(Serializable,Parcelable)!

    [转][原文] 大家好,好久不见,今天要给大家讲一下Android中Intent中如何传递对象,就我目前所知道的有两种方法,一种是Bundle.putSerializable(Key,Object); ...

随机推荐

  1. Redis keys命令

    序号 命令及描述 1 DEL key该命令用于在 key 存在时删除 key. 2 DUMP key 序列化给定 key ,并返回被序列化的值. 3 EXISTS key 检查给定 key 是否存在. ...

  2. FPGA+ARM or FPGA+DSP?

    网上有人说.现在的FPGA,ARM功能已经强大到无需DSP协助处理了,未来DSP会不会消声灭迹?是DSP取代FPGA和ARM,还是ARM,FPGA取代DSP呢?担心好不容易学精了DSP,结果DSP变成 ...

  3. CSS3组件化之圆波扩散

    本篇文章主要介绍用CSS3实现的水波扩散涟漪,圆波扩散,光圈扩散,雷达波向外散发动画. 预期效果应该是这样:,其实应该比这个更优美,因为设计师提供的gif出现透明度丢失问题,所以建议用css3实现. ...

  4. 解决springboot项目中@Value注解参数值为null的问题

    1.错误场景: springboot项目中在.properties文件(.yml)文件中配置了属性值,在Bean中使用@Value注解引入该属性,Bean的构造器中使用该属性进行初始化,此时有可能会出 ...

  5. BZOJ.5311.贞鱼(DP 决策单调)

    题目链接 很容易写出\(O(n^2k)\)的DP方程.然后显然决策点是单调的,于是维护决策点就可以了.. 这个过程看代码或者别的博客吧我不写了..(其实是忘了) 这样复杂度\(O(nk\log n)\ ...

  6. AFNetworking源码品读

    AFNetworking源码品读 AFNetworking这个库几乎是所有苹果开发人员在使用HTTP协议的第一选择,为什么这个库会有这么大的吸引力呢?其实答案就需要问问自己,为什么会用它,而不是别的库 ...

  7. 仅100行的JavaScript DOM操作类库

    如果你构建过Web引用程序,你可能处理过很多DOM操作.访问和操作DOM元素几乎是每一个Web应用程序的通用需求.我们我们经常从不同的控件收集信息,我们需要设置value值,修改div或span标签的 ...

  8. BZOJ 2754 SCOI 2012 喵星球上的点名 后缀数组 树状数组

    2754: [SCOI2012]喵星球上的点名 Time Limit: 20 Sec  Memory Limit: 128 MBSubmit: 2068  Solved: 907[Submit][St ...

  9. codevs 1001 舒适的线路 kruskal/gcd

    舒适的线路 Time Limit: 1 Sec  Memory Limit: 256 MB 题目连接 http://www.codevs.cn/problem/1001/ Description Z小 ...

  10. Linux 内核编译步骤及配置详解

    前言    Linux内核是操作系统的核心,也是操作系统最基本的部分. Linux内核的体积结构是单内核的.但是他充分采用了微内核的设计思想.使得虽然是单内核.但工作在模块化的方式下.并且这个模块可以 ...