失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > Android之翻转静音

Android之翻转静音

时间:2020-11-15 20:04:00

相关推荐

Android之翻转静音

在Android系统框架里实现翻转静音;

利用java的观察者模式可以轻松实现来电翻转静音;

服务类程序代码:

package com.example.smartcalltest;import android.app.Service;import android.content.Context;import android.content.Intent;import android.hardware.Sensor;import android.hardware.SensorManager;import android.media.AudioManager;import android.os.IBinder;import android.telephony.PhoneStateListener;import android.telephony.TelephonyManager;import android.util.Log;import com.example.smartcalltest.SensorProviderService.OnTurnPhoneDownListener;public class LewaTurnSilentService extends Service{private TelephonyManager mTelephonyMgr;private SensorManager mSensorMgr;private AudioManager mAudioMgr;private Sensor mSensor;private int mRingerMode;private SensorProviderService mSensorProviderSer = null;private boolean mVibRinging;private boolean mSensorFlag = false;private boolean mUpwardFlag = false;private boolean DEBUG = true;@Overridepublic void onCreate() {super.onCreate();if (DEBUG) {Log.i(TAG, "onCreate");}mTelephonyMgr = (TelephonyManager) this.getSystemService(Context.TELEPHONY_SERVICE);mTelephonyMgr.listen(mPhoneStateListener, PhoneStateListener.LISTEN_CALL_STATE);mAudioMgr = (AudioManager) this.getSystemService(Context.AUDIO_SERVICE);mSensorMgr = (SensorManager) this.getSystemService(Context.SENSOR_SERVICE);mSensor = mSensorMgr.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);}@Overridepublic IBinder onBind(Intent intent) {return null;}@Overridepublic int onStartCommand(Intent intent, int flags, int startId) {return START_STICKY;}@Overridepublic void onDestroy() {if (DEBUG) {Log.i(TAG, "onDestroy");}if (true == mSensorFlag) {mSensorProviderSer.unregisterSensorEventerListener(2);mSensorFlag = false;}mTelephonyMgr.listen(mPhoneStateListener, PhoneStateListener.LISTEN_NONE);super.onDestroy();}public void TurnSilentRing() {mSensorProviderSer.setOnTurnPhoneDownListener(new OnTurnPhoneDownListener() {@Overridepublic void onTurnPhoneDown() {// TODO Auto-generated method stubmAudioMgr.setRingerMode(AudioManager.RINGER_MODE_SILENT);mSensorProviderSer.unregisterSensorEventerListener(2);}});}private final PhoneStateListener mPhoneStateListener = new PhoneStateListener() {@Overridepublic void onCallStateChanged(int state, String incomingNumber) {switch (state) {case TelephonyManager.CALL_STATE_RINGING:if (false == mSensorFlag) {mRingerMode = mAudioMgr.getRingerMode();//mVibRinging = mAudioManagerHelper.isVibrationEnabled();if (AudioManager.RINGER_MODE_SILENT != mRingerMode) {mSensorProviderSer = new SensorProviderService(LewaTurnSilentService.this);mSensorProviderSer.registerSensorEventerListener(2);TurnSilentRing();mSensorFlag = true;}}break;case TelephonyManager.CALL_STATE_OFFHOOK:case TelephonyManager.CALL_STATE_IDLE:if (true == mSensorFlag) {mSensorProviderSer.unregisterSensorEventerListener(2);mAudioMgr.setRingerMode(mRingerMode);//mAudioManagerHelper.setVibrationEnabled(mVibRinging);mSensorFlag = false;mUpwardFlag = false;}break;default:break;}}};}

利用加速度传感器监听,自己封装的接口;

private final SensorEventListener mAccelerometerEventListener2 = new SensorEventListener() {@Overridepublic void onAccuracyChanged(Sensor sensor, int accuracy) {// TODO Auto-generated method stub}@Overridepublic void onSensorChanged(SensorEvent event) {// TODO Auto-generated method stubif (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) {if (event.values[2] > 5) {mPhoneScreenUp = true;} else {if (mPhoneScreenUp && event.values[2] < -3.0f) {mTurnPhoneUp = true;onTurnPhoneDownListener.onTurnPhoneDown();}}}}};

public void setOnTurnPhoneDownListener(OnTurnPhoneDownListener listener) {onTurnPhoneDownListener = listener;}public interface OnTurnPhoneDownListener {public void onTurnPhoneDown();}

最后用的时候不要忘了,注册和注销监听器哦……

如果觉得《Android之翻转静音》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。