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 源码

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

红日666

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值