写在前面的话:

1. 最近在自学Android,也是边看书边写一些Demo,由于知识点越来越多,脑子越来越记不清楚,所以打算写成读书笔记,供以后查看,也算是把自己学到所理解的东西写出来,献丑,如有不对的地方,希望大家给与指正。

2. 由于类似于读书笔记,可能格式神马的会比较随(hen)意(chou),大家看着受不了,可以使劲吐槽。

*************************************我只是分割线***************************************

上一篇已经讲了一些关于Activity的东西,这次记录一下android中比较重要的一个类Intent。

1. 什么是Intent?

Intent是Android程序中各组件之间进行交互的一种重要方式,它一般可被用于启动活动、启动服务、以及发送广播等场景,这一篇主要讲述在活动启动过程中Intent的用法,它的用法大致分为两种情况:显式Intent和隐式Intent。

2. 显示Intent用法

就像上一篇讲的关于活动的启动、活动间的传值其实都是显式Intent的用法,

<2.1>页面普通跳转

Intent _intent = new Intent();
_intent.setClass(MainActivity.this, TestActivity.class);
startActivity(_intent);

上面表示的是从活动MainActivity跳转到活动TestActivity,不传递任何数据。

<2.2>页面跳转,并返回值

在MainActivity活动中,按钮点击中添加如下代码:

Intent _intent = new Intent();
_intent.setClass(MainActivity.this, ActivityC.class);
startActivityForResult(_intent, 100);

在ActivityC活动中,把数据传递回去:

    class ButtonActivityAListener implements OnClickListener {

        @Override
public void onClick(View v) {
if (v.getId() == R.id.btnreturn) {
Intent _intent = new Intent();
EditText editText = (EditText) findViewById(R.id.edittext_first);
String inputStr = editText.getText().toString();
_intent.putExtra("dashenzaijia", inputStr);
setResult(Activity.RESULT_OK, _intent);
finish();
}
}
}
//可能还有一种情况,如果用户不是点击按钮返回的上一个活动,而是点击的手机的Back按钮,这时候只要重写onBackPressed方法就好了,如下
@Override
public void onBackPressed() {
Intent _intent = new Intent();
_intent.putExtra("dashenzaijia", "need transfer value");
setResult(Activity.RESULT_OK, _intent);
finish();
}

在MainActivity活动的onActivityResult方法中,获取对应的返回值:

    @Override
protected void onActivityResult(int arg0, int arg1, Intent arg2) {
// TODO Auto-generated method stub
super.onActivityResult(arg0, arg1, arg2);
if (arg0 == 100 && arg1 == Activity.RESULT_OK) {
String returnValue = arg2.getStringExtra("dashenzaijia");
TextView view = (TextView) this.findViewById(R.id.textview_showresult);
if (!returnValue.isEmpty()) {
view.setText("来自Activity C的值:" + returnValue);
} else {
view.setText(null);
}
}
}

请注意参数中100,还有Activity.RESULT_OK,它们是两个页面传值的暗号,只有对上了暗号,才能去获取对应活动传回来的值。

<2.3>把值传递给下一个活动

在MainActivity活动的跳转按钮中,实现如下代码:

    Intent _intent = new Intent();
_intent.setClass(MainActivity.this, TestActivity.class);
_intent.putExtra("transfertockey", "give current value to activity c");
startActivity(_intent);

在TestActivity活动中的onCreate(Bundle savedInstanceState)方法获取:

   Intent intent = getIntent();
String value = intent.getStringExtra("transfertockey");
Log.i("onCreate", value);

 3. 隐式Intent用法

<3.1.1>显示一个新的活动:如上面2.1说的,我们在显示一个新的活动的时候,可以传那个新的活动的类名,也可以用如下方法,

在AndroidManifest.xml文件中,为CanvasActivity活动添加配置,自定义一个Action,并加上默认的Category:

        <activity android:name=".CanvasActivity">
<intent-filter>
<action android:name="firstapp.canvasactivity.firstaction" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>

然后再MainActivity活动中,调用方法如下:

    class NotificationClickListener implements OnClickListener {
@Override
public void onClick(View v) {
if (v.getId() == R.id.btnshownotification) {
Intent intent = new Intent("firstapp.canvasactivity.firstaction");
startActivity(intent);
}
}
}

备注:<category android:name="android.intent.category.DEFAULT" />这一句话一定不能少,不然会报错的。

<3.1.2>显示一个新的活动,在3.1.1基础上,我们也可以自定义一个Category,

        <activity android:name=".CanvasActivity">
<intent-filter>
<action android:name="firstapp.canvasactivity.firstaction" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="firstapp.canvasactivity.firstcategory" />
</intent-filter>
</activity>

调用和3.1.1差不多,只是多了一句:

    class NotificationClickListener implements OnClickListener {
@Override
public void onClick(View v) {
if (v.getId() == R.id.btnshownotification) {
Intent intent = new Intent("firstapp.canvasactivity.firstaction");
intent.addCategory("firstapp.canvasactivity.firstcategory");
startActivity(intent);
}
}
}

<3.2.1>显示一个网页,在ActivityB活动中,点击按钮代码,即可打开浏览器:

ActivityB在AndroidManifest.xml文件中的配置是:

        <activity
android:name=".ActivityB"
android:label="@string/title_activity_b">
</activity>

调用如下:

        Button btnOpenWeb = (Button)findViewById(R.id.btnopenweb);
btnOpenWeb.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse("http://www.baidu.com"));
startActivity(intent);
}
});

备注:一定要在网址前面添加http://,不然会报错的,系统不知道www.baidu.com是什么,应该用什么打开。

<3.2.2>显示一个网页,网页打开的代码和上面一样,唯一不同的是在AndroidManifest.xml中,我们在ActivityB活动的配置中加上几行代码:

        <activity
android:name=".ActivityB"
android:label="@string/title_activity_b">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" /> <data android:scheme="http" />
</intent-filter>
</activity>

运行代码,你会发现,我们的ActivityB也变成了打开网页的应用的一个选项。

<3.3>调用地图,显示位置

        Button btnOpenWeb = (Button)findViewById(R.id.btnopenweb);
btnOpenWeb.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse("geo:114.06667,22.61667?q=高新园地铁站"));
}
});

和3.2.2一样,如果在AndroidManifest.xml的ActivityB中加上一句<data android:scheme="geo" />,ActivityB也变成了能够打开这个地理位置的列表中选项之一。

<3.4>调用系统拨号

        Button btnOpenWeb = (Button)findViewById(R.id.btnopenweb);
btnOpenWeb.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse("tel:15811588511"));
startActivity(intent);
}
});

好了,Intent的基本的一些用法就先说到这里,有什么问题,请指正。

Android基础学习第三篇—Intent的用法的更多相关文章

  1. Android Sip学习(三)Android Voip实现

    Android Sip学习(三)Android Voip实现   Android Sip学习(准备知识)SIP 协议完整的呼叫流程 Android Sip学习(一)Android 2.3 APIs S ...

  2. Android Animation学习(三) ApiDemos解析:XML动画文件的使用

    Android Animation学习(三) ApiDemos解析:XML动画文件的使用 可以用XML文件来定义Animation. 文件必须有一个唯一的根节点: <set>, <o ...

  3. JavaScript 基础 学习(三)

    JavaScript 基础 学习(三) 事件三要素 ​ 1.事件源: 绑定在谁身上的事件(和谁约定好) ​ 2.事件类型: 绑定一个什么事件 ​ 3.事件处理函数: 当行为发生的时候,要执行哪一个函数 ...

  4. JAVA基础学习-集合三-Map、HashMap,TreeMap与常用API

    森林森 一份耕耘,一份收获 博客园 首页 新随笔 联系 管理 订阅 随笔- 397  文章- 0  评论- 78  JAVA基础学习day16--集合三-Map.HashMap,TreeMap与常用A ...

  5. java网络爬虫基础学习(三)

    尝试直接请求URL获取资源 豆瓣电影 https://movie.douban.com/explore#!type=movie&tag=%E7%83%AD%E9%97%A8&sort= ...

  6. Spark基础学习精髓——第一篇

    Spark基础学习精髓 1 Spark与大数据 1.1 大数据基础 1.1.1 大数据特点 存储空间大 数据量大 计算量大 1.1.2 大数据开发通用步骤及其对应的技术 大数据采集->大数据预处 ...

  7. Java基础学习笔记三 Java基础语法

    Scanner类 Scanner类属于引用数据类型,先了解下引用数据类型. 引用数据类型的使用 与定义基本数据类型变量不同,引用数据类型的变量定义及赋值有一个相对固定的步骤或格式. 数据类型 变量名 ...

  8. Android Studio 学习笔记(三):简单控件及实例

    控件.组件.插件概念区分 说到控件,就不得不区分一些概念. 控件(Control):编程中用到的部件 组件(Component):软件的组成部分 插件(plugin): 应用程序中已经预留接口的组件 ...

  9. Android基础学习第二篇—Activity

    写在前面的话: 1. 最近在自学Android,也是边看书边写一些Demo,由于知识点越来越多,脑子越来越记不清楚,所以打算写成读书笔记,供以后查看,也算是把自己学到所理解的东西写出来,献丑,如有不对 ...

随机推荐

  1. matlab 曲线拟合

    曲线拟合(转载:http://blog.sina.com.cn/s/blog_8e1548b80101c9iu.html) 补:拟合多项式输出为str 1.poly2str([p],'x') 2. f ...

  2. 机器学习——AdaBoost元算法

    当做重要决定时,我们可能会考虑吸取多个专家而不只是一个人的意见.机器学习处理问题也是这样,这就是元算法(meta-algorithm)背后的思路. 元算法是对其他算法进行组合的一种方式,其中最流行的一 ...

  3. p/invoke 碎片-- 对字符串的处理

    字符串在内存中的的几种风格 字符串作为参数和返回值 参考 字符串在内存中的几种风格 所谓的风格,也就是字符串在内存中的存在形式.如何存放的,占据内存的大小,还有存放顺序等.在不同的编程语言和不同的平台 ...

  4. Java IO流学习总结

    Java流操作有关的类或接口: Java流类图结构: 流的概念和作用 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象.即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输 ...

  5. IntelliJ IDEA mac 快捷键

    cmd+O 查找类alt+cmd+O 符号shift+cmd+O 查找文件^+space 补全alt + F7 查找符号的使用情况F1 查看文档cmd+b 跳转定义,或者 鼠标+ctrlcmd+F12 ...

  6. JavaScript 秘密花园 学习心得

    目的 记录一下学习心得,便于以后复习,内容是比较基础的...但是很多内容我还是不知道... 对象 对象使用和属性 1.JavaScript 中所有变量都可以当作对象使用,除了两个例外 null和dun ...

  7. 关于LESS

    LESS 是动态的样式表语言,通过简洁明了的语法定义,使编写 CSS 的工作变得非常简单. 翻译成大白话:写CSS算是体力活,并没有编程的感觉,不给前端人员装逼的机会,于是就搞了这玩意,相当于编程写C ...

  8. 商业智能BI

    参考资料: 7 款顶级开源 BI(商务智能)软件和报表工具

  9. codevs2216 行星序列

    题目描述 Description "神州"载人飞船的发射成功让小可可非常激动,他立志长大后要成为一名宇航员假期一始,他就报名参加了"小小宇航员夏令营",在这里小 ...

  10. BLAST套件

    Blastn是将给定的核酸序列与核酸数据库中的序列进行比较: Blastp是使用蛋白质序列与蛋白质数据库中的序列进行比较,可以寻找较远的关系: Blastx将给定的核酸序列按照六种阅读框架将其翻译成蛋 ...