Android 学习笔记 7 组件通信及广播消息(二)
Intent隐式启动Activity
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" />这是由于拨打电话属于手机底层的服务,与用户隐私及通话费等相关,因此,程序必须取得相关权限。“
加上之后发现不再报错。可以直接呼出电话了。