音视频播放、横竖屏切换

news/2024/12/2 21:58:18/

Android工程搭建

  • 1、音频播放
      • 工具类胆码
  • 2、视频播放
  • 3、横竖屏切换
  • 4、动态获取权限

1、音频播放

为了保证当前只有一首歌曲播放,创建一个MediaPlayer的工具类,使用单例模式创建,但是为了节省资源,我们需要采用懒汉式去创建

工具类胆码

package com.example.day8_medioplayer;import android.media.MediaPlayer;import java.io.IOException;
import java.util.ArrayList;public class MedioPlayerUtils {MediaPlayer mediaPlayer;public static MedioPlayerUtils medioPlayerUtils;ArrayList<Music> list = new ArrayList();int index = 0;public static final int NEXT = 0;//下一首public static final int DAN = 1;//单曲循环public static final int RAN = 2;//随机播放int type = 0;//当前播放歌曲类型// TODO 构造私有化private MedioPlayerUtils() {//确保只有一个MediaPlayer对象mediaPlayer = new MediaPlayer();mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {@Overridepublic void onCompletion(MediaPlayer mp) {switch (type) {case NEXT:next();break;case DAN:setDataSource(index);break;case RAN:int ran = (int) (Math.random() * list.size());index = ran;next();break;}}});}// TODO 获取工具类对象public static MedioPlayerUtils getInstnce() {if (medioPlayerUtils == null) {synchronized (String.class) {if (medioPlayerUtils == null) {medioPlayerUtils = new MedioPlayerUtils();}}}return medioPlayerUtils;}// TODO 设置播放模式public int setType() {switch (type) {case NEXT:type = DAN;break;case DAN:type = RAN;break;case RAN:type = NEXT;break;}return type;}// TODO 设置资源的方法public void setDataSource(int position) {try {mediaPlayer.reset();//重置mediaPlayer.setDataSource(list.get(position).getData());//设置资源mediaPlayer.prepare();//准备mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {@Overridepublic void onPrepared(MediaPlayer mp) {mediaPlayer.start();}});index = position;} catch (IOException e) {e.printStackTrace();}}// TODO 开始播放public void start() {if (mediaPlayer != null) {mediaPlayer.start();}}// TODO 暂停播放public void pause() {if (mediaPlayer != null) {mediaPlayer.pause();}}// TODO 下一首public void next() {index++;if (index >= list.size() - 1) {index = 0;}setDataSource(index);}// TODO 上一首public void pre() {index--;if (index <= 0) {index = list.size() - 1;}setDataSource(index);}// TODO 判断当前是否播放public boolean isPlaying() {if (mediaPlayer != null) {boolean playing = mediaPlayer.isPlaying();return playing;}return false;}// TODO 设置资源集合public void setList(ArrayList<Music> list) {this.list = list;}// TODO 获取歌曲总时长public long getDuration() {long duration = 0;if (mediaPlayer != null) {duration = mediaPlayer.getDuration();}return duration;}// TODO 获取歌曲当前时长public long getCurrentPosition() {long currentPosition = 0;if (mediaPlayer != null) {currentPosition = mediaPlayer.getCurrentPosition();}return currentPosition;}// TODO 修改歌曲当前进度public void seekTo(int msec) {if (mediaPlayer != null) {mediaPlayer.seekTo(msec);}}// TODO 返回当前歌手public String getArtist() {if (mediaPlayer != null) {String artist = list.get(index).getArtist();return artist;}return null;}// TODO 返回当前歌曲public String getTitle() {if (mediaPlayer != null) {String title = list.get(index).getTitle();return title;}return null;}}

2、视频播放

用MediaPlayer去播放视频,需要采用方法将SurfaceView和MediaPlayer绑定在一起
 @Overridepublic void surfaceCreated(SurfaceHolder holder) {MedUtils.mediaPlayer.setDisplay(surfaceHolder);}

3、横竖屏切换

		//LANDSCAPE 山  横屏    PORTRAIT 肖像 竖if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {//横屏setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);//竖屏} else if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) {//竖屏setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);//横屏}

4、动态获取权限

	 String[] strings = new String[]{Manifest.permission.INTERNET};//判断安卓手机版本是否大于23,也就是安卓6.0以上if(Build.VERSION.SDK_INT>=Build.VERSION_CODES.M){//循环权限数组,授权for(int i=0;i<strings.length;i++){int permission = ActivityCompat.checkSelfPermission(this, strings[i]);if(permission== PackageManager.PERMISSION_DENIED){requestPermissions(strings,101);}}}

http://www.ppmy.cn/news/852686.html

相关文章

AVAudioPlayer的锁屏播放控制和锁屏播放信息显示

在设置这个锁屏之前&#xff0c;首先得设置应用支持后台音乐播放&#xff0c;TAGETS->Info->Required background modes->App plays audio or streams audio/video using AirPlay 或者在plist中设置如上边数据。 1.添加self为第一响应者&#xff0c;并设置接收远程控制…

MTK隐藏导航栏,去掉下拉,永不锁屏,永不灭屏

MTK隐藏导航栏 修改全局属性&#xff0c; 有兴趣的可以全局搜索这个属性&#xff0c;在systemui以及framework中好像都有写 qemu.hw.mainkeys1MTK去掉下拉通知 这里去掉添加的view&#xff0c;只是没有界面了 --- a/alps/vendor/mediatek/proprietary/packages/apps/System…

Android 10 系统屏蔽底部按键 禁止锁屏 禁用横屏

一、屏蔽底部按键 1&#xff0c;先说状态栏 状态栏其实就是SystemUI.apk&#xff0c;源码目录是android/frameworks/base/packages/SystemUI/&#xff0c;但是状态栏的隐藏并不是修改SystemUI中的内容&#xff0c;而是修改android/frameworks/base/core/res/res/values/dimen…

android 11.0 12.0去掉屏幕锁屏(屏幕默认锁屏方式改成无)

1.概述 在11.0 12.0定制化开发中,需求要求去掉屏幕锁屏功能,默认无锁屏功能,所以要去掉系统默认锁屏功能 分两步: 1.1在SettingProvider数据库加载时默认无锁屏 1.2去掉Settings中关于选择锁屏的方式 2.去掉屏幕锁屏(屏幕默认锁屏方式改成无)核心代码 frameworks/base/pa…

锁屏界面的小锁图标UI异常,竖屏不居中,显示在右边。锁屏小锁图标在底部会与提示文字重叠。

这边思路就是&#xff0c;写死底部居中&#xff0c;然后把它里面算法的方法直接注释掉&#xff0c;完全依赖xml来布局。 verride/vendor/mediatek/proprietary/packages/apps/SystemUI/res/layout/status_bar_expanded.xml 这里面有个 <com.android.keyguard.LockIconVie…

Android自定义锁屏实现----仿正点闹钟滑屏解锁

本文原创&#xff0c;转载请注明出处&#xff1a;http://blog.csdn.net/qinjuning 前几周看了下解锁的框架&#xff0c;基本上算是弄了个脸熟。看着别人花哨的解锁界面&#xff0c;心里也很痒痒的。于是&#xff0c;画了一天时间&#xff0c; 捣鼓出了这个成果----仿正点闹钟解…

android 9.0 10.0 去掉锁屏功能和息屏功能(永不息屏)

1.概述 在10.0的系统产品定制化开发中,需要对去掉锁屏功能和 息屏功能 让屏幕永远不要熄灭, 在android api中默认息屏时间为1分钟 2.去掉锁屏功能和息屏功能(永不息屏)的核心类 packages/SettingsProvider/res/values/defaults.xml frameworks/base/packages/SettingsProv…

android 软件锁屏代码,纹字锁屏(com.iooly.android.lockscreen) - 8.1.1 - 应用 - 酷安

权限信息 更改网络连接性 连接WLAN网络和断开连接 停用屏幕锁定 开机启动 修改或删除您的USB存储设备中的内容 读取您的USB存储设备中的内容 android.permission.WRITE_INTERNAL_STORAGE 查看网络连接 完全的网络访问权限 读取手机状态和身份 检索正在运行的应用 防…