Android音频开发:感应(息屏/亮屏)管理
Posted 红日666
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android音频开发:感应(息屏/亮屏)管理相关的知识,希望对你有一定的参考价值。
一、Android音频开发(一):音频基础知识
二、Android音频开发(二):录制音频(WAV及MP3格式)
三、Android音频开发(三):使用ExoPlayer播放音频
四、Android音频开发(四):音频播放模式
五、Android音频开发(五):感应(息屏/亮屏)管理
附GitHub源码:MultimediaExplore
这节主要涉及到两部分音频管理:
1、息/亮屏管理:
屏幕管理,主要涉及的音频应用场景有,如录制或播放音频时刻控制其不息屏,或者通过监听息屏亮屏事件,我们针对性的控制音频的存储、发送、播放等操作。
所需权限:
<!--唤屏/息屏权限-->
<uses-permission android:name="android.Manifest.permission.DEVICE_POWER"/>
<uses-permission android:name="android.permission.WAKE_LOCK"/>
主要用到的系统的 PowerManager 及 PowerManager.WakeLock类。
powerManager = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
wakeLock = powerManager.newWakeLock(PowerManager.PROXIMITY_SCREEN_OFF_WAKE_LOCK, ":SensorMode");
/**
* 设置亮屏时间
*/
private void setScreenOn()
if (wakeLock != null)
wakeLock.acquire(10*60*1000L);
/**
* 设置息屏
*/
private void setScreenOff()
if (wakeLock != null)
wakeLock.setReferenceCounted(false);
wakeLock.release();
wakeLock = null;
息屏/亮屏的事件,也是通过系统广播来监听:
/* 注册屏幕唤醒时的广播 */
IntentFilter mScreenOnFilter = new IntentFilter("android.intent.action.SCREEN_ON");
context.registerReceiver(mScreenOReceiver, mScreenOnFilter);
/* 注册机器锁屏时的广播 */
IntentFilter mScreenOffFilter = new IntentFilter("android.intent.action.SCREEN_OFF");
context.registerReceiver(mScreenOReceiver, mScreenOffFilter);
/**
* 唤屏 / 息屏广播监听者
*/
private BroadcastReceiver mScreenOReceiver = new BroadcastReceiver()
@Override
public void onReceive(Context context, Intent intent)
String action = intent.getAction();
if (action.equals("android.intent.action.SCREEN_ON"))
Log.d(TAG, "—— SCREEN_ON ——");
if (screenListener != null)
screenListener.screenChanged(true);
else if (action.equals("android.intent.action.SCREEN_OFF"))
Log.d(TAG ,"—— SCREEN_OFF ——");
if (screenListener != null)
screenListener.screenChanged(false);
;
通过以上接收到的广播,我们便可以添加自己所需的 息屏/亮屏 相关的业务逻辑。
2、感应管理:
感应管理,主要是使用者体表对手机的距离感应监听,来进行相关的音频业务操作,比如用户面部贴近手机听筒,这个时候可以考虑息屏,且播放模式切换成听筒模式;远离手机听筒,此时手机亮屏,播放模式可以切换成外放模式等。
这里主要用到系统的两个类、一个监听:SensorManager 、Sensor 和 SensorEventListener:
首先对其初始化操作如下:
sensorManager = (SensorManager) context.getSystemService(Context.SENSOR_SERVICE);
sensor = sensorManager.getDefaultSensor(Sensor.TYPE_PROXIMITY);
sensorManager.registerListener(this, sensor, SensorManager.SENSOR_DELAY_NORMAL);
然后通过距离监听,做相应的音频业务处理即可:
/**
* 距离感应监听
* @param event
*/
@Override
public void onSensorChanged(SensorEvent event)
float value = event.values[0];
Log.d(TAG, "onSensorChanged ---> value:" + value);
if (AudioPlayManager.isPlaying())
//音频正在播放
if (value == sensor.getMaximumRange())
AudioModeManager.getInstance().setSpeakerOn(true);
setScreenOn();
else
AudioModeManager.getInstance().setSpeakerOn(false);
setScreenOff();
else
if (value == sensor.getMaximumRange())
AudioModeManager.getInstance().setSpeakerOn(true);
setScreenOn();
完整源码:
音频感应模式管理类-SensorModeManager 源码:
以上是关于Android音频开发:感应(息屏/亮屏)管理的主要内容,如果未能解决你的问题,请参考以下文章