Android MediaPlayer播放 听筒外放切换

Android MediaPlayer播放 听筒外放切换,通过注册监听,来判断是否靠近听筒。

结合mediaplayer坐音频播放,Android hardware搞一个根据光感听筒外放切换。
MediaManager是播放器构建模式,维护了一个MediaPlayer,用来重新处理播放器。

MediaManager.builder()
                        .setContext(MainActivity.this)
                        .setDebugModel(true)
                        .setMediaListener(new MediaCallBack() {
   
                            @Override
                            public void progress(int i, int max) {
   

                            }

                            @Override
                            public void prepare(int duration, String time) {
   

                            }

                            @Override
                            public void start() {
   

                            }

                            @Override
                            public void end() {
   

                            }

                            @Override
                            public void stop() {
   

                            }
                        })
                        .setUrl("https://96.f.1ting.com/local_to_cube_202004121813/96kmp3/2020/09/21/21e_wc/01.mp3")
                        .build();

开始播放

                MediaManager.start();

停止

                MediaManager.stop();

是否正在播放

                MediaManager.isPlaying();

暂停

                MediaManager.pause();

继续

                MediaManager.resume();

销毁当前的mediaplayer destory时候调用

                MediaManager.removeAll();

AudioManager

Android为我们提供的(音量大小控制)的API: AudioManager(音频管理器)了,该类位于Android.Media包下,提供了音量控制与铃声模式相关操作。

获得AudioManager对象实例

AudioManager am = (AudioManager)context.getSystemService(Context.AUDIO_SERVICE);

PowerManager

Android系统为我们提供的电源管理的一个API,其相关接口与设备电池的续航能力有很大的关联, 官方也说了,除非是迫不得已吧,不然的话,应该尽量避免使用这个类,并且使用完以后一定要及时释放。所谓的电源管理包括:CPU运行,键盘或者屏幕亮起来!核心其实就是wakelock锁机制,只要我们拿着这个锁, 那么系统就无法进入休眠状态,可以给用户态程序或内核获取到。锁可以是:”有超时的“或者 “没有超时“,超时的锁到时间后会自动解锁,如果没有了锁或超时,内核会启动休眠机制来进入休眠。

添加权限

    <uses-permission android:name="android.permission.WAKE_LOCK"></uses-permission>

获取PowerManager对象实例

 powerManager = (PowerManager) getActivity().getSystemService(POWER_SERVICE);

整体的代码如下:


/**
 * Created by SHICHENG
 * <p>
 * Time on 2021/11/08
 */
public class AudioSensorBinder implements LifecycleObserver, SensorEventListener {
   

    public final String TAG = this.getClass().getSimpleName();

    private final AudioManager audioManager;
    private final PowerManager powerManager;

    @Nullable
    private WeakReference<AppCompatActivity> activity;
    private SensorManager sensorManager;
    private Sensor sensor;
    private PowerManager.WakeLock wakeLock;

    @RequiresApi(api = Build.VERSION_CODES.M)
    public AudioSensorBinder(@Nullable AppCompatActivity mActivity) {
   
        this.activity = new WeakReference<>(mActivity);
        //可以监听生命周期
        if (getActivity()!=null){
   
            getActivity().getLifecycle().addObserver(this);
        }
        audioManager = (AudioManager) getActivity().getSystemService(AUDIO_SERVICE);
        powerManager = (PowerManager) getActivity().getSystemService(POWER_SERVICE);
        registerProximitySensorListener();
    }

    @OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
    public void onResume() {
   

    }

    @OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
    public void onDestroy() {
   
        sensorManager.unregisterListener(this);
        sensorManager = 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Android诚

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

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

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

打赏作者

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

抵扣说明:

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

余额充值