Android12_播放器_surfaceVIew_照相机_传感器

编程的时间与空间的概念,两者不可兼得(技术固定),时间换空间,空间换时间

sufaceView占用比较大的空间但是效率高

1,音乐播放器 MediaPlayer

①同步的

大致流程按下图走即可,播放最好写在服务里,因为要在后台播放

1.1 new出来的mediaplayer 默认处于Idie(空闲),reset()也可以让其处于初始状态

1.2 setDataSource()设置好文件之后就处于Initialized()初始化状态

1.3 可以通过setOnErrorListener方法查看播放过程中失败原因,对应的int what是为什么失败.

1.4 prepare();处于准备状态.

1.5 start()开始播放,进入Starer状态

1.6 setOnCompletionListener()播放状态监听

②不同步的音乐播放

prepareAsync()异步准备,播放网络的音乐文件,

记得添加权限

Prepare()同步的准备,运行在主线程,网速够快的前提下没问题,但是也有可能导致应用程序无响应

prepareAsync()异步的准备,会自己开启子线程去播放,但是这里可能会有没有准备好就开启播放的可能,这里要设置一个setOnprepareListener()的监听,当准备好了之后再去调用start()方法去播放

可以在准备监听的事件中去设置一个消息框:正在缓冲

2,soundpool

mediaPlayer底层实现比较复制,步骤繁琐,当一个音频资源在单位时间内大量的重复播放,mediaPlayer就不方便了.

Soundpool:单位时间内大量播放音频,应用场景,游戏按扳机开枪

在res目录下,创建一个文件夹raw放置音频文件,会自动生成R文件的id

步骤:①创建声音池

SoundPool soundpool = new SoundPool(音频的数量,推荐使用AUdioManager.STREAM_MUSIC(还有其他类型,MUSIC时间长短不容),声音的质量);

②把音频资源加载到内存 ,返回一个声音在内存中的id

Int Soundid = Soundpool.load(上下文,资源id,优先级); //放在点击事件里就无法载入

③播放声音

Soundpool.play(声音id,左声道1.0,右声道1.0,优先级(0最低),循环次数0不循环,-1永远循环,rate音频播放的速率0.5-2.0)

音频播放的速率应用场景:汤姆猫的声音app

左右声道的音量大小,最大为1.0

3,视频播放器

①一般都是横屏播放,在Activity标签中定义screenOrientation=”LandScope”//设置为横屏

样式标签中定义:item,name=android:windowFullScreen  true

(在Theme.NoTitleBar.Fullscreen的样式中有)

②新的控件VideoView vv

在activity中找到它(3GP,MP4的都可以播放)

vv.setVideoPath()//设置播放路径

//需要进度条,快进快退

MediaController mc = new xx(this);//创建控制器

mc.setAnchorView(vv)//设置控制器控制的videoView

vv.setMediaContro aller(mc)// 设置控制器

Vv.start();开始播放

真实的手机支持的格式更多

4,SurfaceView 控件sv

一般安卓里比较复杂的控件由mvc组成(ListView)

4.1 SurfaceView单位时间内完成界面的大量多次更新

因为它有双缓冲机制

线程A ----更新ui -----后台计算 ---更新ui

线程B ----后台计算----更新ui ---后台计算

SurfaceView可以在子线程中更新ui(视频播放底层就是用的它可以大量跟新)

4.2 子线程更新ui的使用步骤:

①创建一个子线程

SurfaceHolder holder = sv.getHolder();//界面里面的内容显示控制器

Canvas = holder.lockCanvas();//返回一个画板,并且锁定了画布

Paint = new paint(),paint.setColor();

canvas.drawCircle(x,y,半径,画笔);

②直接运行会报异常,lockCanvas//锁定了画布

holder.unlockCanvasAndPost(canvas)//解锁画布并更新ui

锁定画布之后立刻更新ui,睡眠的代码放到最后

4.3 细节问题:

①如果把带有SurfaceView的子线程放到onCreate()中使用lockCanvas获取的画布有可能为null,但是如果之前有睡眠的代码,就可以正常进行.

因为sv占用的内存和cpu开销很大,当界面完全可见的时候才会创建完毕,如果界面最小化holder就会被销毁掉,所以在onCreate()中去更新ui,sv的holder可能还没有创建,所以会报空指针异常

解决方法:sv.getHolder().addCallBack(接口)//注册一个SurfaceView控制器的回调

里面有三个子方法创建,销毁,大小发生了变化

②如果SurfaceView被销毁了,执行的代码也应该全部销毁掉(终止一个线程可以通过return结束它)

4.4 采用SurfaceView进行播放视频

①创建控制器的回调方法sv.getHolder().addCallBack();

②创建一个mediaplayer去设置路径,//它在后台也会播放

③在回调方法中,如果sv被创建了

就准备播放,开始播放,可以设置进度seekto(位置);

④在回调的方法中,如果sv被销毁了,就准备暂停视频

Int weizhi = mediaplayer.getCurrentPosition();//把位置信息保存下来,可以通过sp保存.

Mediaplayer.stop()//停止的方法

Mediaplayer.release();//释放资源

一般还是用mediaplayer因为它比较方便,要自定义就SurfaceView控件

5,照相机拍照

查看离线文档>>标题栏Develop>>Media and Camera>>Camera 使用已经存在的照相机应用

里面有一段示例代码,可以用来使用照相机应用

// create Intent to take a picture and return control to the calling application
    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

filename = new File(); // create a file to save the image
    intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri); //Uri.fromfile(filename)

// start the image capture Intent
    startActivityForResult(intent, CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE);

使用onActivityResult方法获取返回结果

要记得判断照片是否存在,且有内容

不从intent里面直接获取图片是因为这个图片被严重的压缩,很模糊,所以通过文件的方式进行传递

6.手机录制视频

大致流程跟拍照一致,不过不能在ImageView中显示,而要在VideoView 中显示

Intent intent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE);

需要配权限.

7,传感器相关

安卓默认支持很多传感器,利用这些传感器可以开发出很多有意思的应用,摇一摇用的是方向传感器.加速度传感器,丢手机加速度的软件

但是实际上手机里面的传感器是有限的,看手机价位来,查询手机上传感器的数量,谷歌已经封装好了一套接口用来查看.

SensorManager sm = getSystemService(SENSOR_SERVICE);

sm.getSensorList(Sensor.TYPE_ALL)//拿到所有的传感器,返回一个list集合

对于每一个元素getName()即可获取名称.

//不过模拟器虽然有传感器,但是不能用(你想摇晃你的电脑吗?)

实例:光线传感器.应用场景打电话的时候,屏幕变黑了.

Sensor = sm.getDefaultSensor(Sensor.TYPE_LIGHT)//获取一个传感器,根据参数获取

sm.registerListener(传感器监听,sensor,rate);

rate采样频率,敏感度.游戏开发采样速度一分钟几百次,越快越费电,

SENSOR_DELAY_NORMAL //采用默认的采样速度

传感器监听里面有两个方法

一个onSensorChanged(event):当传感器数据发生变化的时候调用,

Event的帮助文档里有关于各种传感器的说明

Float light = Event.value[0]//光传感器的强度

可以对光线强度做判断,然后判断是否开启夜间模式,屏幕降低亮度等

一个是onAccurayChanged(sensor,accuracy)//精度发生变化:如地磁传感器,位置发生改变

额外:应用程序使用完了传感器要记得关闭,因为它会在后台运行,并且很耗电.

sm.unregisterListener(监听器);

7.2 指南针应用:使用传感器:方向传感器

①获取传感器服务管理,获取传感器

②查看帮助文档value[0]代表:地磁北极和手机Y轴的夹角,0=北,90=东,180=南,270=西.

Z轴是水平垂直,X,Y轴是手机屏幕中心为原点的平面X,Y轴

③然后可以对角度进行判断,可以判断出东南西北,通过一张指南针图片,指针的旋转角度来判断对应的角度.

时间: 2024-10-08 22:24:38

Android12_播放器_surfaceVIew_照相机_传感器的相关文章

关于主流播放器蛋疼的联网功能的研究

结论: pc版百度音乐阉割联网功能 手机版天天动听或网易云音乐阉割联网功能 作为一名虔诚的LoveLiver,听μ's的歌写程序是必须的~ 无疑,音乐一定要是flac无损的(尽管我听不出来),带高清专辑封面(尽管我不看),有双语歌词的(尽管我也不怎么看) 在众多LoveLiver的共同努力下,我们有了符合以上要求的歌曲(如图,有高清专辑封面,在同文件夹下有同名歌词) 然后开始放吧 ナニソレ!! 说好的专辑封面呢???说好的歌词呢??? 于是有了这篇科研(评测仅供娱乐,非要用本地专辑封面和歌词的强

【黑马Android】(11)音乐播放器/视频播放器/照相机/常见对话框/notification通知/样式和主题/帧动画/传感器/应用程序反编译与安装

音乐播放器api <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:or

你也可以用java的swing可以做出这么炫的mp3播放器_源码下载

I had published the blog : 你用java的swing可以做出这么炫的mp3播放器吗? and to display some screenshots about this MP3 Player. The target for this blog is that to publish the source code, and you can download the source code and give me some advices if possible. The

微信小程序(有始有终,全部代码)开发---跑步App+音乐播放器

我的微信开发者工具 开篇语 好不容易,终于把所有的基础课程全部看完了!昨天,我很高兴地开始了看别人做的项目进行深度的学习.其实也说不上是项目吧,更多的像是一种给新手看的示例代码.然后我在这些代码上面进行我自己的改进.最后也就有了接下来我会给大家带来的这篇文章中的项目.这个项目是完整的,它包括了一个原本的示例代码中带着的莫名其妙的动画组件(可能是为了更多额展示微信小程序的控件体系)以及跑步的组件,还有我后来自己加上去的一个音乐播放组件.总共也就有了三个的功能:动画效果展示:跑步的定时以及定位功能:

常用网页播放器代码

我们在网页上看到的播放器无外乎WMP/RealOne/Macromedia Flash Player,其他的无非是面板不同,或者添加了其他控件,对于计算机上安装的一些播放器也都是编码和解码器的整合,其最核心的编码和解码技术是相同的.例如:网络上最流行的windows media流(asf,wma,wmv格式...),Real流(rm,rmvb...),还有MPEG系列编码格式(MP4/MP3格式...) Windows Media Video 是微软推出的一种流媒体格式,它是在“同门”的ASF(

手机音乐播放器开发

<DOCTYPE html> <html> <head> <title>手机音乐播放器</title> <style> *{margin:0;padding:0;} body{ background:#000000; /*性能优化:一个优秀的开发工程师一定是为服务器,CPU考虑(提高代码的加载效率网站打开效率)*/ } #music{ position:relative; width:322px; height:635px; //ba

你用java的swing可以做出这么炫的mp3播放器吗?

这个mp3播放器是基于java的swing编写的,我认为界面还是可以拿出来和大家看一看评一评. 先说说创作的初衷,由于前段时间工作不是很忙,与其闲着,还不如找一些东西来给自己捣腾捣腾,在 之前写的 java开发_闹钟 和 pygame系列_百度随心听_完美的UI设计 的驱使下产生了编写这个mp3的灵感. 也许大伙儿可能认为我脑袋是不是被骡子踢了,闲着真没事,干嘛非得再往工作(工作上面也是coding)上面靠,其实可以 搞一些其他的东西嘛,如运动啊,旅游啊,看书啊(看书倒是一直坚持着的,如果可以我

容易使用的读取文本播放器 Text to Speech Maker 2.5

FilmConvert Stand Alone 1.216 MacOSXAutodesk.Smoke.v2015.SP1.MacOSX 1DVDAutodesk Smoke 2015提供更快的效能和更平易近人的价格专 为以Mac计算机作业的小型工作室设计,Smoke 2015专业影音特效和剪辑工具现在具备了 3D追踪.新的Timeline FX工作流程.针对搭载OS X Mavericks操作系统的新版Mac Pro新增硬件支持和系统运作的最佳化,并与Final Cut Pro X提供更佳的互通

模拟video播放器

本以为写一个video播放器不难,可写着写着坑就越挖越大了. 先看一下播放器大概是长这样的: 在开发过程中这几个问题深深地困扰着我: 1.各机器兼容问题 2.关于视频播放过程中进度条显示情况 3.关于改变播放进度和音量大小的操作问题 1.各机器兼容问题 除了chrome很乖支持良好外,其中UC获取不到duration属性,也就获取不到视频的总长度了,但这部分可以由后台传参数解决,但是不能禁用系统播放器这个就不太好了.... 抛开其它浏览器,来看看腾讯X5内核的浏览器的支持情况:http://x5