SensorEventListener手机翻背静音震动

添加震动权限

 

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

 

public class TurnSilent extends Activity {

	private SensorManager mSensorManager01;
	private TextView mTextView01;

	private int audioManagerMode;

	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.turn_silent);

		mTextView01 = (TextView) findViewById(R.id.myTextView1);
		mSensorManager01 = (SensorManager) getSystemService(Context.SENSOR_SERVICE);

		audioManagerMode = getAudioManagerMode();
		setTextByAudioManagerMode(audioManagerMode);
	}

	private void setTextByAudioManagerMode(int audioManagerMode) {
		switch (audioManagerMode) {
		case AudioManager.RINGER_MODE_NORMAL:
			mTextView01.setText("正常模式");
			break;
		case AudioManager.RINGER_MODE_SILENT:
			mTextView01.setText("静音模式");
			break;
		case AudioManager.RINGER_MODE_VIBRATE:
			mTextView01.setText("震动模式");
			break;
		}
	}

	private int getAudioManagerMode() {
		int ringerMode = 0;
		try {
			AudioManager audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
			if (audioManager != null) {
				/* RINGER_MODE_NORMAL | RINGER_MODE_SILENT | RINGER_MODE_VIBRATE */
				ringerMode = audioManager.getRingerMode();
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		return ringerMode;
	}

	private final SensorEventListener mSensorListener = new SensorEventListener() {

		public void onAccuracyChanged(Sensor sensor, int accuracy) {

		}

		public void onSensorChanged(SensorEvent event) {
			if (event.sensor.getType() == Sensor.TYPE_ORIENTATION) {
				// float fRollAngle = event.values[SensorManager.DATA_X];
				/* 取得Y平面倾斜的Pitch角度 */
				float fPitchAngle = event.values[SensorManager.DATA_Y];

				/* 正面(Y轴旋转),经实验结果为小于-120为翻背面 */
				if (fPitchAngle < -120) {
					/* 因设定为静音模式 */
					ChangeToSilentMode();

					/* 设定为震动模式 */
					ChangeToVibrateMode();

					setTextByAudioManagerMode(audioManagerMode);
				} else {
					/* 正面守勺(Y轴旋转),经实验结果为大于-120为翻正面 */
					/* 变更为正常模式 */
					ChangeToNormalMode();

					setTextByAudioManagerMode(audioManagerMode);
				}
			}
		}

	};

	/* 变更为静音模式 */
	private void ChangeToSilentMode() {
		try {
			AudioManager audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
			if (audioManager != null) {
				/* RINGER_MODE_NORMAL | RINGER_MODE_SILENT | RINGER_MODE_VIBRATE */
				audioManager.setRingerMode(AudioManager.RINGER_MODE_SILENT);
				audioManagerMode = audioManager.getRingerMode();
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	/* 变更为震动模式 */
	private void ChangeToVibrateMode() {
		try {
			AudioManager audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
			if (audioManager != null) {
				/* 调用setRingerMode方法,设定模式 */
				audioManager.setRingerMode(AudioManager.RINGER_MODE_VIBRATE);
				/* RINGER_MODE_NORMAL | RINGER_MODE_SILENT | RINGER_MODE_VIBRATE */
				audioManagerMode = audioManager.getRingerMode();
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	/* 变更为正常模式 */
	private void ChangeToNormalMode() {
		try {
			AudioManager audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
			if (audioManager != null) {
				/* RINGER_MODE_NORMAL | RINGER_MODE_SILENT | RINGER_MODE_VIBRATE */
				audioManager.setRingerMode(AudioManager.RINGER_MODE_NORMAL);
				audioManagerMode = audioManager.getRingerMode();
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	//重写以下的两个方法
	protected void onResume() {
		/* 注册几个SensorListener的Listener */
		/* 传入Sensor模式与rate */
		List<Sensor> sensors = mSensorManager01
				.getSensorList(Sensor.TYPE_ORIENTATION);
		mSensorManager01.registerListener(mSensorListener, sensors.get(0),
				SensorManager.SENSOR_DELAY_NORMAL);

		super.onResume();
	}

	protected void onPause() {
		/* 重写onPause事件,取消mSensorListener */
		mSensorManager01.unregisterListener(mSensorListener);
		super.onPause();
	}

}
 

翻背之前

 

翻背之后

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值