Android拨打电话等功能实现及其延伸

前言

项目中经常用到点击一个button,直接拨打电话的功能。今天就由此功能系统的记录一下相关知识点。

一、拨打电话功能

有两种方法:
第一种如下:

Intent intent = new Intent(Intent.ACTION_CALL);
Uri data = Uri.parse("tel:13800000000");
intent.setData(data);
startActivity(intent);

这种方法会直接拨打电话,这种方法的前提是需要在AndroidManifest.xml文件中添加拨打电话的权限

<uses-permission android:name="android.permission.CALL_PHONE"/>

如果应用是这种方式启动打电话功能,如果用户关闭了app的拨打电话权限。当执行此方法的时候,会异常退出!
第二种方法如下:

Intent intent = new Intent(Intent.ACTION_DIAL);
Uri data = Uri.parse("tel:13800000000");
startActivity(intent);

这种方式会调起拨打电话界面,最终是否拨打是由用户做决定。
这种方式不需要赋予app相应的 权限。

二、其他相关功能
1、使用Intent打开网页
Intent intent = new Intent(Intent.ACTION_VIEW);
Uri data = Uri.parse("http://www.baidu.com");
startActivity(intent);
2、使用Intent播放视频
String filePath = Environment.getExternalStorageDirectory().getPath()+"/video.mp4"
Intent intent = new Intent(Intent.ACTION_VIEW);
Uri data = Uri.parse(filePath);
intent.setDataAndType(uri, "video/mp4");
startActivity(intent);
3、使用Intent调用系统相册
Intent intent1 = new Intent(Intent.ACTION_PICK);
intent1.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, "image/*");
startActivityForResult(intent1, REQUEST_CODE);

这样会调起系统的相册,如果想得到选取的照片,需要在调起相册的Activity中重新onActivityResult,并添加读取文件的权限,本文暂时不讨论这些。

4、使用Intent调起照相功能
Intent intent = new Intent();
// 指定开启系统相机的Action
intent.setAction(MediaStore.ACTION_IMAGE_CAPTURE);        startActivityForResult(intent, 1);

此方式只能调起系统的相机并拍照,但是并不会保存到手机上,而且调起拍照功能的Activity更得不到照片。
如果想拍照并得到照片。代码如下:

Intent intent = new Intent();
intent.setAction(MediaStore.ACTION_IMAGE_CAPTURE);
String out_file_path = Environment.getExternalStorageDirectory().getPath()+"img";
File dir = new File(out_file_path);
if (!dir.exists()) {
    dir.mkdirs();
} 
Uri uri = Uri.fromFile(new File(cameraPath));
// 设置系统相机拍摄照片完成后图片文件的存放地址
intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
startActivityForResult(intent, REQUEST_CODE);

然后再在调用拍照功能的Activity中重写onActivityresult方法。

以上是一些相关的功能的大致的实现,欢迎指正

三、隐式启动Activity

以上都属于隐式启动activity
下面讲一下更通用的隐式启动activity的相关知识。

隐式启动不能直观的看出启动的是哪个Activity,而是通过action和category去指定要启动的Activity。

Activity在AndroidManifest.xml文件注册的时候,添加标签<intent-filter>,在此标签中就可以添加<action>`<category>标签了,也就能只表明当前Activity可以响应哪些启动规则,示例:

<activity android:name=".ActivityA">
    <intent-filter>
        <action android:name="xxx"/>
        <category android:name="tt"/>
        <category android:name="android.intent.category.DEFAULT"/>
    </intent-filter>
</activity>

注意,如果使用隐式注册activity的时候,<category android:name="android.intent.category.DEFAULT"/>这句是必须要加上的,否则会找不到这个activity
而启动此activity的方法如下:

Intent intent = new Intent();
intent.setAction("xxx");
intent.addCategory("tt");
startActivity(intent);

以上,就是今天总结的,后续遇到会继续补充,欢迎指正!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值