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 =