安卓学习 之 多媒体技术(八)
一、通知
- 需要NotificationManager对通知进行管理,getSystemService获取系统中的那个服务。
NotificationManager manager =
(NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);
用support-v4库提供的NotificationCompat类来创建Notification对象,确保了兼容性。
创建一个丰富的Notification对象,setContentTitle设置标题,setContentText设置内容,setWhen用于指定通知被创建的时间。使用Build方法进行生成。
Notification notification = new NotificationCompat.Builder(this)
.setContentTitle("This is content title")
.setContentText("This is content text")
.setWhen(System.currentTimeMillis())
.setSmallIcon(R.mipmap.ic_launcher)
.setLargeIcon(BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher))
.build();
- 使用notify方法将通知显示出来,notify()有两个参数,一个是id,一个是刚才创建的notification对象。
manager.notify(1, notification);
- 现在的notify可以显示出来,但是不能相应点击事件。我们现在让他点击后进入NotificationActivity活动中。
先构建Intent对象,pendingIntent式延迟执行的Intent,根须需求选择是使用getActivity还是getService。
Intent intent = new Intent(this,NotificationActivity.class);
PendingIntent pi = PendingIntent.getActivity(this,0,intent,0);
第一个参数是context,第二和第四个参数通常传入0就可以了。
- 在NotificationCompat.Builder中调用setContentIntent(pi)传入即可。
- 通知图标在产生点击事件时不会消失,要使其消失,有两种方法:
- 要在NotificationActivity中添加
NotificationManager manager = (NotificationManager)
getSystemService(NOTIFICATION_SERVICE);
manager.cancel(1);
- 或者NotificationCompat.Builder调用setAutoCancel(true)
通知的高级用法
- 允许播放音频。
Uri soundUri = Uri.fromFile(new File("/system/media/audio/ringtones/ Basic_tone.ogg"));
notification.sound = soundUri;
- 震动。
//下标为0的值表示手机静止的时长,下标为1的值表示手机振动的时长,下标为2的值又表示手机静止的时长,以此类推。
setVibrate(new long[]{0,1000,1000,1000}).build();
notification.vibrate = vibrates;
- LED灯
// LED 灯以绿色的灯光一闪一闪的效果
notification.ledARGB = Color.GREEN;
notification.ledOnMS = 1000;
notification.ledOffMS = 1000;
notification.flags =
Notification.FLAG_SHOW_LIGHTS;
二、短信
接收短信
- 定义一个接受者。
class MessageReceiver extends BroadcastReceiver { @Overridepublic void onReceive(Context context, Intent intent) { Bundle bundle = intent.getExtras();Object[] pdus = (Object[]) bundle.get("pdus"); // 提取短信消息SmsMessage[] messages = new SmsMessage[pdus.length]; for (int i = 0; i < messages.length; i++) {messages[i] = SmsMessage.createFromPdu((byte[]) pdus[i]);}String address = messages[0].getOriginatingAddress(); // 获取发送方号码String fullMessage = "";for (SmsMessage message : messages) {fullMessage += message.getMessageBody(); // 获取短信内容}sender.setText(address); content.setText(fullMessage);}
}
我们从 Intent 参数中取出了一个 Bundle 对象,然后使用 pdu 密钥来提取一个 SMS pdus 数组, 其中每一个 pdu 都表示一条短信消息。接着使用 SmsMessage 的
createFromPdu() 方法将每一个 pdu 字节数组转换为 SmsMessage 对象, 调用这个对象的
getOriginatingAddress()方法就可以获取到短信的发送方号码,调用 getMessageBody()方法就可以获取到短信的内容,然后将每一个 SmsMessage 对象中的短信内容拼接起来,就组成了一条完整的短信。
- 在活动中的oncreate方法中绑定 事件 与 内容接受者。
receiveFilter = new IntentFilter();
receiveFilter.addAction("android.provider.Telephony.SMS_RECEIVED");
messageReceiver = new MessageReceiver();
registerReceiver(messageReceiver, receiveFilter);
接收短信
- 得到SmsManager实例,直接调用sendextMessage方法。
SmsManager smsManager = SmsManager.getDefault();
smsManager.sendTextMessage(to.getText().toString(),
null,msgInput.getText().toString(), null, null);
sendTextMessage()方法接收五个参数,其中第一个参数用于指定接收人的手 机号码,第三个参数用于指定短信的内容
- 类似通知,想要在发送短信之后知道短信的状态,怎么办呢?
sendFilter = new IntentFilter();
sendFilter.addAction("SENT_SMS_ACTION");
sendStatusReceiver = new SendStatusReceiver();
registerReceiver(sendStatusReceiver, sendFilter); send.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {SmsManager smsManager = SmsManager.getDefault(); Intent sentIntent = new Intent("SENT_SMS_ACTION");PendingIntent pi = PendingIntent.getBroadcast (MainActivity.this, 0, sentIntent, 0);smsManager.sendTextMessage(to.getText().toString(), null,msgInput.getText().toString(), pi, null);}
});class SendStatusReceiver extends BroadcastReceiver {@Overridepublic void onReceive(Context context, Intent intent) {if (getResultCode() == RESULT_OK) {// 短信发送成功Toast.makeText(context, "Send succeeded", Toast.LENGTH_LONG).show();} else {// 短信发送失败Toast.makeText(context, "Send failed", Toast.LENGTH_LONG).show();}}
}
- 获取到了一个 PendingIntent 对象,并将它作为第四个参数传递到 sendTextMessage()方法中
- PendingIntent 发出 SENT_SMS_ACTION 这样的一个事件
- 新建一个事件接受者SendStatusReceiver,绑定该接受者 和 SENT_SMS_ACTION 事件。
三、摄像头和相册
- 定义输出图片的路径
- 启动相机程序的Intent
- 启动相机并拍照
- 进入onActivityResult,启动截图的Intent
- 截图成功
- 把图片显示出来
四、多媒体文件
音频
方法名 | 功能描述 |
---|---|
setDataSource() | 设置要播放的音频文件的位置。 |
prepare() | 在开始播放之前调用这个方法完成准备工作。 |
start() | 开始或继续播放音频。 |
pause() | 暂停播放音频。 |
reset() | 将 MediaPlayer 对象重置到刚刚创建的状态。 |
seekTo() | 从指定的位置开始播放音频。 |
stop() | 停止播放音频。调用这个方法后的 MediaPlayer 对象无法再播放音频。 |
release() | 释放掉与 MediaPlayer 对象相关的资源。 |
isPlaying() | 判断当前 MediaPlayer 是否正在播放音频。 |
getDuration() | 获取载入的音频文件的时长。 |
首先需要创建出一个MediaPlayer 对象,然后调用 setDataSource()方法来设置音频文件的路径,再调用 prepare()方法使MediaPlayer 进入到准备状态,接下来调用start()方法就可以开始播放音频,调用pause() 方法就会暂停播放,调用 reset()方法就会停止播放。
视频
方法名 | 功能描述 |
---|---|
setVideoPath() | 设置要播放的视频文件的位置。 |
start() | 开始或继续播放视频。 |
pause() | 暂停播放视频。 |
resume() | 将视频重头开始播放。 |
seekTo() | 从指定的位置开始播放视频。 |
isPlaying() | 判断当前是否正在播放视频。 |
getDuration() | 获取载入的视频文件的时长。 |
安卓学习 之 多媒体技术(八)相关推荐
- 安卓学习文档收集汇总
安卓学习文档收集汇总 https://www.jianshu.com/p/86aed183ce6c?utm_campaign=maleskine&utm_content=note&ut ...
- 【安卓学习之开发工具】 Android 学习-- 下载过的一些项目
█ [安卓学习之开发工具] Android 学习-- 下载过的一些项目 █ 相关文章: ● [安卓学习之常见问题] app维护可能遇到的问题 ● [IOS学习之常见问题] app维护可能遇到的问题 ● ...
- 安卓TV开发(八) 移动智能终端多媒体爬虫技术 获取加载网页视频源
转载请标明出处:http://blog.csdn.net/sk719887916/article/details/40049137,作者:skay 从上一篇学习中,学习了多媒体技术中的怎么去用josu ...
- 【安卓学习之常见问题】google play service
█ [安卓学习之常见问题]google play service █ 系列文章目录 提示:这里是收集了安卓学习之常见问题的相关文章 [安卓学习之常见问题] 界面(Activity/Fragment)之 ...
- Kotlin 学习笔记(八)—— Kotlin类与对象之接口
Kotlin 学习笔记(八)-- Kotlin类与对象之接口 Kotlin学习笔记系列教程 Kotlin 学习笔记(一)-- 概述.学习曲线.开发工具.参考资料 Kotlin 学习笔记(二)-- 基础 ...
- Windows进程与线程学习笔记(八)—— 线程切换与TSS/FS
Windows进程与线程学习笔记(八)-- 线程切换与TSS/FS 要点回顾 线程切换与TSS 内核堆栈 调用API进0环 实验:分析SwapContext 线程切换与FS 段描述符结构 分析Swap ...
- Windows保护模式学习笔记(八)—— 页目录表基址/页表基址
Windows保护模式学习笔记(八)-- 页目录表基址/页表基址 要点回顾 一.页目录表基址 实验:拆分线性地址C0300000,并查看其对应的物理页 第一步:打开一个进程,获得它的Cr3 第二步:查 ...
- .Net程序员安卓学习之路5:使用xutils注入View和事件以及图片的显示
原文:.Net程序员安卓学习之路5:使用xutils注入View和事件以及图片的显示 xUtils注入和图片显示 一.xUtils注入 引用官方介绍: ViewUtils模块:•android中的io ...
- OpenCV学习笔记(八):形态学morpholgy(2):开/闭运算,形态学梯度、顶帽/黑帽morphologyEx()
OpenCV学习笔记(八):形态学morpholgy(2):开.闭运算,形态学梯度.顶帽.黑帽:morphologyEx() 数学形态学(Mathematical morphology) 是一门建立在 ...
最新文章
- 计算机会计学ufo报表,计算机会计实践部分工资管理系统.ppt
- python第三周笔记_Python第三周 学习笔记(1)
- webstorm前端调用后端接口_一篇前端同学对后端接口的吐槽
- linux中facl有什么作用,在Linux中使用setfacl后权限被拒绝
- 终端服务器超过了 最大连接数
- IE8 select 动态下拉遇到的问题
- python3.9新特性_Python3.9又更新了:dict内置新功能
- vmware快速搭建OpenStack云计算平台
- 博弈-尼姆博弈(nimm)
- 5. php 基本数据类型
- CCF推荐+SCI二区期刊征收AI方向特刊|确定3个月出录用结果
- Vue中如何解决跨域问题
- 微软office2004 抢新体验版
- 将 npm/yarn 的源地址替换成国内镜像的源地址
- 设置笔记本为无线wifi发射器
- UML入门1:事物和事物关系简介
- Blo Tx Pending
- Froyo(Android2.2)移植到Mips平台经验总结
- for和while循环
- Android高德地图贴合图片完成手绘地图展示