Android 学习笔记 7 组件通信及广播消息(二)

Intent隐式启动Activity

隐式启动的好处在于不需要在第一个组件中指明需要启动另外的哪一个组件,而由Android系统来决定,这样有利于降低组件之间的耦合度

选择隐式启动Activity,Android系统会在程序运行时解析Intent,并根据一定的规则对Intent和组件进行匹配,使Intent上的action、data和category与目标Activity吻合。匹配的组件可以是程序本身的Activity,也可以是Android系统内置的Activity,还可以是第三方应用程序提供的Activity。因此,这种方式强调了Android组件的可复用性。

因为是隐式调用,这种情况下intent的ComponentName一项值为空。此时Intent构造函数的第1个参数是Intent需要执行的动作(action),Android系统支持的常见动作字符串常量可以参考下表。第2个参数是URI,表示需要传递的数据(data)。

ACTION_VIEW  最常用的动作,对以Uri方式传送的数据(data),根据Uri协议部分以最佳方式启动相应的Activity进行处理。对于http:address将打开浏览器查看;对于tel:address将打开拨号界面并呼叫指定的电话号码

ACTION_DIAL 打开内置拨号界面,显示Uri中提供的电话号码

ACTION_CALL  打开拨号盘界面并拨打电话,使用Uri中的数字部分作为电话号码

ACTION_ANSWER   打开接听电话的Activity,默认为Android内置的拨号界面

ACTION_DELETE  打开一个Activity,对所提供的数据进行删除操作

ACTION_EDIT 打开一个Activity,对所提供的数据进行编辑操作

ACTION_INSERT  打开一个Activity,在提供数据的当前位置插入新项

ACTION_WEB_SEARCH  打开一个Activity,对提供的数据进行Web搜索

ACTION_PICK   启动一个子Activity,从提供的数据列表中选取一项

ACTION_SEARCH  启动一个Activity,执行搜索动作

ACTION_SENDTO  启动一个Activity,向数据提供的联系人发送信息

ACTION_SEND  启动一个可以发送数据的Activity

我的练习是调用参数为ACTION_CALL和tel:13278891040的intent构造方法并发送,来启动拨号界面并打电话。

这里需要改变的代码就是onCreate()方法里的intent的构造方法

public void onClick(View v)
{
        //第一个参数为action,第二个参数为uri
        Intent intent = new              Intent(Intent.ACTION_CALL,Uri.parse("tel:13278891040"));
        startActivity(intent);
}

但在这样运行后,点击MainActivity上的button时出现了错误(在手机上闪退)。Logcat上显示fatal exception:main

百度了一下也没发现比较正式的解释,但他们的错误基本上都在AndroidManifest.xml里面,后来在一个博客里看到说必须“在AndroidManifest中添加 users-permission,并声明使用权限:<uses-permission  android:name="android.permission.CALL_PHONE" />这是由于拨打电话属于手机底层的服务,与用户隐私及通话费等相关,因此,程序必须取得相关权限。“

加上之后发现不再报错。可以直接呼出电话了。

时间: 2024-10-12 07:56:38

Android 学习笔记 7 组件通信及广播消息(二)的相关文章

Android 学习笔记 6 组件通信及广播消息(一)

Intent的概念 Intent的官方解释是“An Intent is a messaging object you can use to request an action from another app component. ”这里的app component就是指安卓activity,service,contentprovider,broadcastreceiver四大组件.不同的intent可以使这些组件产生相应的动作,为这些组件之间提供了交互能力.那么这个“messaging obj

Android学习笔记—开发组件3

通知类组件 (1)Toast组件:一般出现在屏幕下方,黑色边框,显示一段时间自动消失,不会打断用户操作. 场景:下载完成.更新完成.充电结束.安装成功等 Toast.makeText(this,"下载完成",Toast.LENGTH_SHORT).show(); (2)Notification组件:状态栏上的通知 特性:具有全局效果的通知,时效性不强. 场景:短信.未接电话.下载等. //获取通知管理器NotificationManager对象 mNitificationManager

Android 学习笔记之Volley开源框架解析(二)

PS:Volley已经学完,可以安心的写一下博客总结一下了... 学习内容: 1.Request的完整封装... 2.RetryPolicy,DefaultRetryPolicy(请求重试策略源码解析) 3.RequestQueue(请求队列源码解析)   RequestQueue(源码解析)...   RequestQueue顾名思义,请求队列,Volley中采用请求队列来管理所有正在提交的Request,将所有封装好的Request保存在其内部,方便管理...而一个Request需要被完整的

ANDROID_MARS学习笔记_S01原始版_013_广播机制二

一.代码1.xml(1)main.xml 1 <?xml version="1.0" encoding="utf-8"?> 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 android:orientation="vertical" 4 android:layout_width="fill_pa

Android学习笔记_数据库(SQLite)(二)

一.修改数据库的表结构(更新数据库版本). 1.在PersonSQliteOpenHelper类中,PersonSQliteOpenHelper的构造方法中需要传入4个参数,最后一个便是数据库版本.当版本数值变化(只能是增加)时就会调用PersonSQliteOpenHelper类中的onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)方法. 2.在onUpgrade方法中采用执行SQL语句来更改数据库的表结构.采用SQLite

Android学习笔记(四六):互联网通信-文件下载

在Android 2.3引入了DownloadManager可以处理复杂的文件下载,包括检查用户是否有数据联系(WIFI或者移动数据),当用户从一个有数据连接的地方移动到无连接的地方(例如离开了wifi或者3G data的access point),确保设备在下载过程中保持awake状态.DownloadManager可以处理HTTP URLs,但是不能处理HTTPS(SSL) URLs. 设置下载文件条件许可 在这个例子,将学习通过DownloadManager从Internet下载文件,并存

十四、Android学习笔记_Android回调函数触发的几种方式 广播 静态对象

一.通过广播方式: 1.比如登录.假如下面这个方法是外界调用的,那么怎样在LoginActivity里面执行登录操作,成功之后在回调listener接口呢?如果是平常的类,可以通过构造函数将监听类对象传入即可.但是在Activity中不能传递监听对象,所以考虑使用广播来实现. public void login(final LoginOnClickListener listener) { Intent intent = new Intent(context, LoginActivity.clas

Android学习笔记(四五):互联网通信-HttpClient、XML解析(W3C)

前几日Android发布了4.0 Icecream,昨天上网发现Begining Book中有Edition 3的版本,比对一下,还是有相当的改动,不仅仅增加了tablet的部分,对原有的章节有有一些修订,前后的调整等等.先按Edtion 2的顺序看,相同章节的看Edtion 3,然后回头看Edition 3的Chapter 24.25(E2的36).26.27.28.29.44.45.46.47几个新增章节.同时将模拟器改为Android 2.3的版本,已适应可能新增的改动. 访问Intern

Android学习笔记二

17. 在ContentProvider中定义的getType()方法是定义URI的内容类型. 18. SQLiteDatabase类中的insert/delete/update/query方法其实也挺好用的,我在EquipmentProvider类中做了实现 19. Android专门有个单元测试项目(Android Test Project),在这个项目中,可以新建一个继承AndroidTestCase类的具体测试类来单元测试某个功能.我新建了一个AndroidTestProject项目,在