Intent是Android程序中各组件之间进行交互的一种重要方式,它不仅可以指明当前组件想要执行的动作,还可以在不同组件之间传递数据。

-----------------------------------------------显示Intent------------------------------------------------

Intent有多个构造器函数的重载,其中一个是Intent( Context packageContent , Class<?>cls )

第一个参数Context要求提供一个启动活动的上下文,第二个参数class则是指定想要启动的目标活动。

 Intent intent = new Intent(FirstActivity.this,SecondActivity.class);

通过Intent的构造函数可以构建出Intent的意图。

Activity类中提供了一个startActivity()方法,这个方法是专门用于启动活动的,它接收一个Intent参数。

 startActivity(intent);

将构建好的Intent传入startActivity()方法就可以启动目标活动了。

修改FirstActivity中按钮的点击事件,代码如下:

  button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(FirstActivity.this,SecondActivity.class);
startActivity(intent);
}
});

如果你想回到上一个活动中,按下Back键就可以销毁当前活动,从而返回到上一个活动(或者显示调用finish()方法销毁活动)

-----------------------------------------隐式Intent---------------------------------------------------

相比于显示Intent,隐式Intent并不明确指定启动某一个活动,而是指定了一系列更为抽象的action和category信息,

然后交由系统去分析这个Intent并帮助我们找出合适的活动去启动。

首先通过在<activity>标签下配置<intent-filter>的内容,可以指定当前活动能够响应的action和category。

向AndroidManifest.xml中的<application>元素下添加:

        <activity android:name=".ThirdActivity">
<intent-filter>
<action android:name="com.example.activitytest.ACTION_START" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="com.example.activitytest.MY_CATEGORY" />
</intent-filter>
</activity>

只有<action>和<category>中的内容同时能够匹配上Intent中指定的action和category时,这个活动才能响应该Intent。

否则程序抛出: android.content.ActivityNotFoundException: No Activity found to handle Intent

            public void onClick(View v) {
//启动能够响应com.example.activitytest.ACTION_START这个action的活动
Intent intent = new Intent("com.example.activitytest.ACTION_START");
//调用Intent中的addCatgory方法添加一个category
intent.addCategory("com.example.activitytest.MY_CATEGORY");
startActivity(intent);
}

注意:每个Intent中只能指定一个action,但却能指定多个category。

------------------------------------------隐式Intent的简单应用--------------------------------------------------------

打开百度:

            public void onClick(View v) {
//Intent,ACTION_VIEW是一个Android系统的内置动作
Intent intent = new Intent(Intent.ACTION_VIEW);
//通过Uri.parse()方法,将字符串解析成Uri对象
intent.setData(Uri.parse("http://www.baidu.com"));
startActivity(intent);
}

原理:浏览器中的Manifest intent-filter配置正好响应我们的Intent

        <activity android:name=".FirstActivity">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<date android:scheme="http" />
</intent-filter>
</activity>

拨打10086:

            public void onClick(View v) {
//Intent.ACTION_DIAL是Android系统的内置动作
Intent intent = new Intent(Intent.ACTION_DIAL);
intent.setData(Uri.parse("tel:10086"));
startActivity(intent);
}

-----------------------------------------------Intent的数据传递---------------------------------------------------

启动活动时传递数据:

Intent中提供了一系列putExtra()方法的重载,可以把我们想要传递的数据暂存在Intent中,启动了另一个活动后,只需要把这些数据Intent中取出即可。

发送数据:

            public void onClick(View v) {
String data = "你好啊,小娜";
Intent intent = new Intent(FirstActivity.this,SecondActivity.class);
//传递字符串data
intent.putExtra("my_data",data);
startActivity(intent);
}

接收数据:

        Intent intent = getIntent();
//接收字符串数据(getXxxExtra("key"))
String data = intent.getStringExtra("my_data");
//弹出消息提示
Toast.makeText(this,data,Toast.LENGTH_SHORT).show();

返回数据给上一个活动:

Activity中有一个startActivityForResult()方法,这个方法期望在活动销毁的时候能够返回一个结果给上一个活动。

startActivityForResult()方法接收两个参数,第一个参数还是Intent,第二个参数是请求码,用于判断数据的来源。

示例:SecondActivity   -->   ThirdActivity    -->  SecondActivity

 //SecondActivity点击事件
btn1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(SecondActivity.this,ThirdActivity.class);
startActivityForResult(intent,1);
}
});
        //ThirdActivity点击返回
btn1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent();
intent.putExtra("data_return", "CMCC");
setResult(RESULT_OK, intent);
finish();
}
});
   //SecongActivity中重写onActivityResult方法
protected void onActivityResult(int requestCode,int resultCode,Intent data){
switch (requestCode){
case 1:
if(resultCode == RESULT_OK){
String returnedData = data.getStringExtra("data_return");
Toast.makeText(this,returnedData,Toast.LENGTH_SHORT).show();
}
break;
default:
}
}

但是上面这种方式当用户通过Back返回键回到SecondActivity时会失效,我们可以通过重写onBackPressed()方法解决这个问题,试一试吧。

Android 中的 Intent 简介的更多相关文章

  1. Android中的Intent Filter匹配规则介绍

    本文主要介绍了隐式Intent匹配目标组件的规则,若有叙述不清晰或是不准确的地方希望大家指出,谢谢大家: ) 1. Intent简介 Intent用于在一个组件(Component,如Activity ...

  2. Android中的Intent详解

    前言: 每个应用程序都有若干个Activity组成,每一个Activity都是一个应用程序与用户进行交互的窗口,呈现不同的交互界面.因为每一个Acticity的任务不一样,所以经常互在各个Activi ...

  3. android中使用Intent在activity之间传递数据

    android中intent传递数据的简单使用: 1.使用intent传递数据: 首先将需要传递的数据放入到intent中 Intent intent = new Intent(MainActivit ...

  4. Android中目的地Intent的使用

    一.什么是Intent? Intent的中文意思是目的.在Android中也是“目的”的意思.就是我们要去哪里,从这个activity要前往另一个Activity就需要用到Intent. 示例代码一: ...

  5. Android中的intent属性

    android之Intent的七大属性 2015年04月03日 ⁄ Android ⁄ 共 14866字 ⁄ 字号 小 中 大 ⁄ 1条评论 Intent用于封装程序的“调用意图”.两个Activit ...

  6. android中通过intent传递复杂数据

    android中在各个service或者acitivity之间可以通过Intent来传递一些数据,intent原生直接提供了一些简单数据类型的数据的传递,使用起来也很方便,比如int boolean ...

  7. android中使用intent来实现Activity带数据跳转

    大家都知道startActivity()是用来切换跳转Activity的.如果想要在另个Activity中出书数据的话.只需要在源activity中使用intent.putExtra()方法传出数据. ...

  8. 在Android中通过Intent使用Bundle传递对象

    IntentBundle传递对象SerializableParcelable Android开发中有时需要在应用中或进程间传递对象,下面详细介绍Intent使用Bundle传递对象的方法.被传递的对象 ...

  9. Android中使用Intent的Action和Data属性实现点击按钮跳转到拨打电话和发送短信

    场景 点击拨打电话按钮,跳转到拨打电话页面 点击发送短信按钮,跳转到发送短信页面 注: 博客: https://blog.csdn.net/badao_liumang_qizhi 关注公众号 霸道的程 ...

随机推荐

  1. 10月16日上午MySQL数据库基础操作(创建、删除)

    以前用的是鼠标在界面上手动创建,这样创建会比较麻烦,而且还会经常出问题.在其它电脑上要用的话还需要重复操作.所以要使用程序代码操作,能通过代码的就不用手动操作. 在数据库界面选择要用的数据库,双击打开 ...

  2. yum配置文件详解

    yum是什么: Yellow dog Updater, Modified主要功能是更方便的添加/删除/更新RPM包,自动解决包的倚赖性问题,它能便于管理大量系统的更新问题. yum特点:可以同时配置多 ...

  3. 快速的mysql导入导出数据(load data和outfile)

    1.load data: ***实际应用:把日志生成的xls文件load到MySQL中: mysql_cmd = "iconv -c -f utf-8 -t gbk ./data/al_ve ...

  4. csrf利用EXP

    <html><body><form action="http://www.xxx.com/user/setting/email_bind.html" ...

  5. Python之路【番外篇】回顾&类的静态字段

    回顾 回顾:字符串.列表.字典的修改关于内存的情况 一.字符串 str1 = 'luotianshuai' str2 = str1 print id(str1) print id(str2) prin ...

  6. python 占位符 %s Format

    1.百分号方式 %[(name)][flags][width].[precision]typecode (name)      可选,用于选择指定的key flags          可选,可供选择 ...

  7. youku的视频代码放到网站上如何实现自适应

    由于是在博客编辑器里面编辑的内容,所以一直想通过CSS的方法来解决,可是上面的方式都有明显的缺陷,最终被迫采用脚本来控制列的高度,代码如下: <divstyle="text-align ...

  8. Eclipse里项目名有红叉,但是底下的每一个文件都没有红叉

    如果是因为java compiler level does not match the version of the installed java, 那么我们打开项目的properties,有一个选项 ...

  9. chrome(谷歌浏览器)老是提示此文件可能损害计算机

    chrome://settings/advanced设置-高级设置-“隐私设置”-取消选中“启用针对网上诱骗和恶意软件的防护功能”复选框试试,

  10. 用libsvm进行回归预测

    最近因工作需要,学习了台湾大学林智仁(Lin Chih-Jen)教授等人开发的SVM算法开源算法包. 为了以后方便查阅,特把环境配置及参数设置等方面的信息记录下来. 林教授年轻时照片 SVM属于十大挖 ...