Android之翻转静音

来源:互联网 发布:linux下载速度很慢 编辑:程序博客网 时间:2024/04/29 06:18

在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;    @Override    public 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);    }    @Override    public IBinder onBind(Intent intent) {        return null;    }    @Override    public int onStartCommand(Intent intent, int flags, int startId) {        return START_STICKY;    }    @Override    public 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() {            @Override            public void onTurnPhoneDown() {                // TODO Auto-generated method stub                mAudioMgr.setRingerMode(AudioManager.RINGER_MODE_SILENT);                mSensorProviderSer.unregisterSensorEventerListener(2);            }        });    }    private final PhoneStateListener mPhoneStateListener = new PhoneStateListener() {        @Override        public 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() {        @Override        public void onAccuracyChanged(Sensor sensor, int accuracy) {            // TODO Auto-generated method stub        }        @Override        public void onSensorChanged(SensorEvent event) {            // TODO Auto-generated method stub            if (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();    }

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

0 0
原创粉丝点击