Android基础总结(10)——手机多媒体的运用:通知、短信、相机、视频播放
时间:2022-04-29
本文章向大家介绍Android基础总结(10)——手机多媒体的运用:通知、短信、相机、视频播放,主要内容包括1、通知的使用、2、接收和发送短信、3、调用摄像头和相册、4、播放多媒体文件、基本概念、基础应用、原理机制和需要注意的事项等,并结合实例形式分析了其使用技巧,希望通过本文能帮助到大家理解应用这部分内容。
Android提供了一系列的API,是我们可以在程序中调用很多手机的多媒体资源,从而编写出更加丰富的应用程序。
1、通知的使用
通知(Notification)是Android中比较有特色的一个功能,当某个应用程序希望向用户发出一些提示信息,而该应用程序又不在前台运行时,就可以借助通知来实现。发出一条通知后,手机最上方的状态栏中会显示一个通知的图标,下拉状态栏后可以看到通知的详细内容。
无论在哪里创建通知,整体的步骤都是相同的,具体的步骤如下:
- 创建一个NotificationManager类的对象来对通知进行管理,这里可以通过Context的getSystemService(Context.NOTIFICATION_SERVICE)方法获取到。
NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE) ;
- 接下来我们需要创建一个Notification对象,这个对象用于存储通知所需的各种信息,我们可以用其有参构造函数来进行创建。并对其相关参数进行设置
1 Notification notification = new Notification(R.drawable.ic_launcher, "this is ticker text", java.lang.System.currentTimeMillis()) ;
2 notification.setLatestEventInfo(this, "this is the title", "this is content text", null);
- 然后我们通过NotificationManager的notify(int id, Notification notification)方法将通知对象发送出去。这样我们发送通知的功能就完成了。
1 manager.notify(1,notification);
- 最后,我们可以通过PendingIntent来实现点击通知后的效果。PendingIntent和Intent的功能非常相似,不同的是Intent是立即执行跳转活动,而PendingIntent则更加倾向于在某个合适的实际去执行动作。关于两者之间的区别详细可以参见:Intent和PendingIntent的区别。我们一般通过其静态方法getActivity()方法、getBroadcast()方法、getService()方法来获取Pendingintent的实例
1 NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE) ;
2 Notification notification = new Notification(R.drawable.ic_launcher, "this is ticker text", java.lang.System.currentTimeMillis()) ;
3
4 //为通知的添加点击效果
5 Intent intent = new Intent(this,NotificationActivity.class) ;
6 PendingIntent pi = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT) ;
7
8 notification.setLatestEventInfo(this, "this is the title", "this is content text", pi);
9 manager.notify(1,notification);
就这样,我们通过点击通知的小图标就可以跳转到NotificaitonActivity活动中去了。
- 跳转到新的活动中去了之后,我们要调用NotificationManager的cancel(int id)方法来取消通知,从而取消那个图标
1 public class NotificationActivity extends Activity {
2
3 @Override
4 protected void onCreate(Bundle savedInstanceState) {
5 super.onCreate(savedInstanceState);
6 setContentView(R.layout.activity_notification);
7 //取消通知,否则跳转过来之后通知仍然存在
8 NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE) ;
9 manager.cancel(1) ;
10 }
11 }
此外,我们还可以通过Noification的属性sound、vibrate、ledARGB等来设置通知到达时的铃声、震动以及前置LED灯的闪烁等。具体参数的设置方法参见:Android中通知的使用-----Notification详解
2、接收和发送短信
收发短信是手机最基本的功能之一了,每个Android手机都会内置一个短信的应用程序,我们使用它就可以轻松完成收发短信的操作了。但是我们也可以自己写相关的应用程序实现这样的功能。也可以具体参见:Android实战技巧之三十九:短信收发。
- 发送短信:这一功能实际上很简单,只用调用SmsManager的sendTextMessage()方法就可以将短信发送出去,当然,这个方法接收好几个参数,具体的有电话号码,短信内容,等等,当然,我们还可以通过注册一个广播接收器来获取短信发送成功还是失败,详细的用法参见: android中发送短信
- 接收短信:实际上,每当有短信到来时,系统会接收到一条相应的广播,所以对于接收短信的功能,我们只需要实现一个广播接收器就可以了,在重写onReceive()方法中来处理接收到的信息。信息的相关内容都封装在传进来的Intent中,可以按照下面的方法进行提取:
1 class MesssageReceiver extends BroadcastReceiver{
2 @Override
3 public void onReceive(Context context, Intent intent) {
4 Bundle bundle = intent.getExtras() ;
5 //提取短信消息
6 Object [] pdus = (Object[]) bundle.get("pdus") ;
7 SmsMessage [] messages = new SmsMessage [pdus.length] ;
8 for(int i = 0 ; i < pdus.length ; i++){
9 messages[i] = SmsMessage.createFromPdu((byte[]) pdus[i]) ;
10 }
11 //提取发送号码
12 String address = messages[0].getDisplayOriginatingAddress() ;
13 String fullMessage = "" ;
14 //获取发送内容
15 for(SmsMessage msg : messages){
16 fullMessage += msg.getMessageBody() ;
17 }
18 //显示出来
19 sender.setText(address);
20 content.setText(fullMessage);
21 }
22
23 }
3、调用摄像头和相册
4、播放多媒体文件
- LeetCode——Two Sum
- TensorFlow全新的数据读取方式:Dataset API入门教程
- 不经意发现的dba_objects和dba_tables中的细节(r7笔记第56天)
- LeetCode——Longest Substring Without Repeating Characters
- Python time模块详解(时间戳↔元组形式↔格式化形式三者转化)
- Maven 核心原理解析(2)
- Linux C 编程——互斥锁mutex
- python两个 list 获取交集,并集,差集的方法.
- python——时间与时间戳之间的转换
- Maven 核心原理解析(3)
- String中的null,以及String s;等区别详解
- Shell编程——Shell中的数学运算
- 如何利用微信监管你的TF训练?
- python 安装spark_Spark环境搭建 (Python)
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- 谈谈Vue开发过程中用到的插件
- 快速入门使用tikz绘制深度学习网络图
- why哥被一道基础面试题给干懵了,一气之下写出万字长文。
- 结构与算法(03):单向链表和双向链表
- 有赞crash平台符号化实践
- 什么是时间分片(Time Slicing)?
- 逐行分析鸿蒙系统的 JavaScript 框架
- 48张小图带你领略Flex 布局之美
- 怎样设计一个 JavaScript 插件系统
- 一道 React 面试题:在浏览器、组件和元素中都渲染了些什么?
- 「新手入门福利」一张脑图带你掌握Git命令
- LeetCode | 58.最后一个单词的长度
- 模拟面试,解锁大厂 ——从Android的事件分发说起
- scRepertoire||单细胞免疫组库分析:R语言应用(一)
- Docker体验(二) - 自建Image