Android 了解完activity的基本知识,接下来了解Android intent(据说是多个activity之间的媒介)。

学习的过程自然少不了参照,我选择的参照是郭霖老师的《第一行代码Android》。
学习是个循序渐进的过程,王二不是一个天赋异禀的同学,所以只能每天多积积硅步。今天看到专访任玉刚:从菜鸟到资深工程师的进阶之路,又一个移动端的大牛登上了CSDN的首页资讯,王二我略感兴奋,这兴奋不是说我自己也想有朝一日如此(但隐隐约约有点,笑),而是心中又多了一个行进的标杆。

一、显式intent

新建second_layout.xml。

    <Button android:id="@+id/button_2"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="button2"/>

新建SecondActivity.java

    protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);requestWindowFeature(Window.FEATURE_NO_TITLE);setContentView(R.layout.second_layout);}

注册activity

        <activity android:name="com.mwq.activity.SecondActivity"></activity>

在FirstActivity.java中增加显示intent

        button.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {Intent intent = new Intent(FirstActivity.this, SecondActivity.class);startActivity(intent);}});
  1. 通过new关键字创建intent对象,其构造方法的参数分别是FirstActivity这个context,以及SecondActivity这个class。
  2. 通过startActivity方法启动intent。
  3. 关键的地方来了,如果首次见FirstActivity.this一定会感兴趣,类名.this就是匿名内部类访问外部类对象的一种方法,这是约定俗成的格式。至于说在上面这段代码中,谁是匿名内部类,谁是外部类,答案是显而易见的:new OnClickListener() {}就是匿名内部类,而代码所在的FirstActivity.java文件对应的上下文就是外部类。
  4. 如果你对类名.this和类名.class感兴趣的话,可以参阅类名.this与类名.class。

二、隐式intent

首先关于隐式intent的概念,我没有很好的理解,无论是书中所说“相比于显式intent,隐式intent则含蓄得多,它并不明确指出我们想要启动哪一个活动,而指定了一系列更为抽象的action和category等信息,然后交由系统分析这个intent,并帮助我们找到合适的活动去启动”,还是 Android入门:隐式Intent文中所说

顾名思义,隐式意图就是在不明确设置激活对象的前提下寻找最匹配的组件,举个例子,比如有5个人:
(1)A:170cm
(2)B:160cm
(3)C:180cm
(4)D:190cm
(5)E:200cm
如果是显式意图的话,如果我们要指明选择A的话会说:”我选择A.“,但是如果是隐式意图,则会说:”我要选择170cm的人“,虽然没有指明要选A,但会寻找条件最匹配的人。

我都不太认可这种说法,但我此刻也没有好的说法,真是无奈。

AndroidManifest.xml中为SecondActivity增加action和category。

        <activity android:name="com.mwq.activity.SecondActivity"><intent-filter><action android:name="com.mwq.activity.ACTION_START"/><category android:name="android.intent.category.DEFAULT"/></intent-filter></activity>
  1. 非常诧异的是,为什么action android:name要使用一个附带包路径的字符串,当然了去掉包路径,使用“ACTION_START”也能启动,只要和intent中的参数匹配就行,但因为我是初学者,先按照规矩来办事吧。
  2. 至于说category android:name为什么是·android.intent.category.DEFAULT,我也不太清楚,不过去掉这个参数后,隐式intent就不能跳转了,整个app会跳出。

FirstActivity.java,把显式intent改成隐式intent。

//              Intent intent = new Intent(FirstActivity.this, SecondActivity.class);Intent intent = new Intent("com.mwq.activity.ACTION_START");
  1. 这样启动程序后,发现也是可以跳转的。
  2. 另外书中提到增加一个category,我就不再赘述了。

三、好玩的intent

①、打开网页

Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse("http://blog.csdn.net/qing_gee"));startActivity(intent);

Create an intent with a given action. All other fields (data, type, class) are null. Note that the action must be in a namespace because Intents are used globally in the system – for example the system VIEW action is android.intent.action.VIEW; an application’s custom action would be something like com.google.app.myapp.CUSTOM_ACTION.

关于Intent(String)的构造方法,上面的doc说得也够仔细的。

嗨嗨,挺不错,可以打开我的博客。
请允许我再说几句题外话。前几日,我更新了自己的头像,终于可以见到王二的真面目了,只可惜,像素低了点,遗憾,以后可以再聚焦到头部一些。以前有为叫momasp的朋友,喷我用女生李孝利的头像赚取流量,我是十分的不解,我没见到自己流量上增加了多少,真是愧对了李孝利这位美女。做一个沉默的程序员都挺难了,还得被说三道四,真是难上加难,哈哈。不过呢,经过反思和自我教育,我还是决定痛改前非,使用自己真实的头像。

②、打电话

Intent intent = new Intent(Intent.ACTION_DIAL);
intent.setData(Uri.parse("tel:10086"));
  1. dial的英文单词意思就是拨打电话的意思。
  2. 有点遗憾的是我的安卓模拟器出来的内容和书中不一样,显然这也不是我想要的效果。

另外,还有其他的使用,可参见Android 打开地图并显示指定的经纬度,发短信,显示地理位置等等。

四、数据传递

①、向下传递

FirstActivity.java

Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
intent.putExtra("name", "沉默王二");

SecondActivity.java

Intent intent = getIntent();
String name = intent.getStringExtra("name");
Log.d("SecondActivity", name);

方式呢,前后呼应,倒也挺好记忆的。

②、向上传递

FirstActivity.java

Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
startActivityForResult(intent, 1111);
  1. 使用startActivityForResult方法来启动intent,传递的第二个参数是一个requestcode。

requestCode If >= 0, this code will be returned in onActivityResult() when the activity exits.

protected void onActivityResult(int requestCode, int resultCode, Intent data) {switch (requestCode) {case 1111:if (resultCode == RESULT_OK) {String response = data.getStringExtra("name");Log.d("FirstActivity", response);}break;default:break;}
}
  1. 匹配requestcode后,判断resultcode是否为ok,然后输出response。

SecondActivity.java中增加对应的处理

        Button button = (Button)findViewById(R.id.button_2);button.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {Intent intent = new Intent();intent.putExtra("name", "沉默王三");setResult(RESULT_OK, intent);finish();}});
  1. 使用默认的构造方法新建intent。
  2. 传递参数name
  3. setResult1方法来向上一个activity传递数据
  4. finish主动结束活动
  5. 为什么创建一个默认的intent就能向上一个活动传递参数,之前的intent都需要指定对应参数,这一次为什么不呢?显然这就需要下一次学习活动的生命周期了,据说是先进后出的栈。
  6. 至于说按菜单中的back键返回,只需要重写SecondActivity.java的onBackPressed方法就行了。

目前学习到的intent的知识倒是不难,很容易理解,但要整理成文,的确还是花了不少时间。


相关文章

  • Android SDK Manager 更新代理配置
  • Android 打开地图并显示指定的经纬度
  • 类名.this与类名.class
  • 了解Activity

笑对现实的无奈,不能后退的时候,不再傍徨的时候,永远向前 路一直都在──陈奕迅《路一直都在》
本文出自:【沉默王二的博客】


  1. Call this to set the result that your activity will return to its caller. ↩

Android 了解intent相关推荐

  1. android intent email,Android Email Intent

    问题 I've set up two buttons. One opens the compose sms intent and the other opens the compose email i ...

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

    这篇文章转自博客园 Android中Intent中如何传递对象,就我目前所知道的有两种方法,一种是Bundle.putSerializable(Key,Object);另一种是Bundle.putPa ...

  3. 3.1 Android组件intent filter

    3.1.0 Intent filter基本概念 前面章节我们说到了Intent,Intent对象中除了ComponentName可以直接指定目标组件外,其它的属性都无法直接指定目标组件.当然我们这里不 ...

  4. 【Android】 Intent应用详解

    转载:http://blog.csdn.net/liuhe688/article/details/7162988 看似尋常最奇崛,成如容易卻艱辛.北宋.王安石 看似普通的事情其实最不同寻常,并不是简简 ...

  5. Android的Intent Action 大全

    为什么80%的码农都做不了架构师?>>>    1.Intent的用法: (1)Action跳转 1. 使用Action跳转,当程序AndroidManifest.xml中某一个 A ...

  6. Android中Intent传递Object和ArrayListObject对象---笔记

    首先看一下Intent的官方的API. 传递一些基本类型数据的方法如下: putExtra(String name, int value) putExtra(String name, String v ...

  7. Android的intent之间复杂参数的传递

    2019独角兽企业重金招聘Python工程师标准>>> Intent是Activity与Activity之间,Activity与Service之间传递参数的介质 Intent传递的参 ...

  8. android intent拍照,Android通过Intent方式调用相机拍照取得图片

    Android通过Intent方式调用相机拍照取得图片 AndroidManifest.XML 权限设置: XML布局设置: 代码: public classMainActivityextendsAp ...

  9. Android之Intent传递数据

    1.Android中的Intent对象中包含了多个putXXX()方法(如putExtra()方法)用来插入不同类型的额外数据,也包含了多个getXXX()方法(如getStringExtra().g ...

  10. android之Intent的七大属性

    Intent用于封装程序的"调用意图".两个Activity之间,可以把需要交换的数据,封装成Bundle对象,然后使用Intent对象,携带数据到另一个Activity中.实现两 ...

最新文章

  1. 从头理解self-attention机制
  2. python安卓版下载安装-python手册中文版apk下载
  3. Proteus与Keil联调
  4. 学习旧岛小程序 (5) observer 函数中修改属性的值
  5. Codeforces Round #374 (Div. 2) A. One-dimensional Japanese Crosswor 水题
  6. nginx 负载均衡 404_nginx配置负载均衡
  7. python代码画皮卡丘_程序员式优雅表白,教你用python代码画爱心
  8. 使用MOM 2005监视DC的磁盘空间
  9. 计算机网络第三章知识网络,计算机基础教案第三章计算机网络基础知识教案
  10. braft中AppendEntries逻辑
  11. 【李宏毅2020 ML/DL】P14 Tips for training DNN | 激活函数、Maxout、正则、剪枝 Dropout
  12. 不固定个数的子元素自适应居中
  13. 【sklearn第八讲】广义线性模型
  14. laravel 框架命令
  15. 使用usb tplink无线网卡搭建无线热点AP
  16. POJ1759Garland题解
  17. 纯翻译 GMSL2-CSI2 MAX9295和MAX9296配对通用过程 编程指南
  18. Netflix是怎么火起来的
  19. 深度之眼 PyTorch 训练营第 4 期(5):构建模型 torch.nn.Module
  20. 基于微信小程序的学生请假系统开发

热门文章

  1. 几个比较不错的国产php框架
  2. 硕、博士论文致谢词产生器
  3. Django DetailView
  4. JS 封装节流(后期优化)
  5. linux重启shutdown命令,linux中shutdown命令关机与重启
  6. 三目运算的简单运用和理解
  7. 虚拟机做开发服务器配置,linux虚拟机做服务器配置
  8. GAN及其变体C_GAN,infoGAN,AC_GAN,DC_GAN(一)
  9. mysql 慢查询日志配置
  10. 原生态REST服务环境