SensorEvnetListener及AudioManager整合应用

Android使用Sensor Manager来判断手机在真实环境的速度、倾斜、选择,正如BroadcastReceiver对象,可以监听系统广播的短信或PhoneState Listener对象,监听系统广播的。

Android的SensorManager事件则是使用SensorListener对象来实现。

为了让Activity程序在OnCreate()后的第一个进入点(onResume()方法)就能监听手机的旋转状态,所以在onResume()方法里创建IntentFilter,使用SensorListener.registerListener()

注册一个自定义的SensorEventListener,且在onPause()离开程序时,取消系统注册(unregisterListener)的SensorListener.

源代码:

public class MainActivity extends Activity {

private SensorManager mSensorManager01;private TextView mTextView01;private int strRingerMode;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);mTextView01=(TextView)findViewById(R.id.myTextView1);try{mSensorManager01=(SensorManager)getSystemService(Context.SENSOR_SERVICE);}catch(Exception e){e.printStackTrace();}GetAudioManagerMode();switch(strRingerMode){case AudioManager.RINGER_MODE_NORMAL:mTextView01.setText(R.string.str_normal_mode);break;case AudioManager.RINGER_MODE_SILENT:mTextView01.setText(R.string.str_silent_mode);break;case AudioManager.RINGER_MODE_VIBRATE:mTextView01.setText(R.string.str_vibrate_mode);break;}

}

/*创建SensorListener捕捉onSensorChanger事件*/private final SensorEventListener mSensorListener=new SensorEventListener(){private float x,y,z;public void onAccuracyChanged(Sensor sensor,int accuracy){}/*使用onSensorChanged方法来捕获手机传感器的状态*/public void onSensorChanged(SensorEvent event){synchronized (mSensorManager01){switch(event.sensor.getType()){case Sensor.TYPE_ACCELEROMETER: //用以判断onSensorChanged传入的三方向的值。x=event.values[0];y=event.values[1];z=event.values[2];if(z>9){/*正面向上*///改变为正常模式 ChangeToNormalMode(); //调用改变模式后,再一次确认手机的模式是什么 switch(strRingerMode) { case AudioManager.RINGER_MODE_NORMAL: mTextView01.setText(R.string.str_normal_mode); break; case AudioManager.RINGER_MODE_SILENT: mTextView01.setText(R.string.str_silent_mode); break; case AudioManager.RINGER_MODE_VIBRATE: mTextView01.setText(R.string.str_vibrate_mode); break; }}else if(z<-9){/*正面向上*///改变为静音模式ChangeToSilentMode();//再设置为振动模式ChangeToVibrateMode();//判断铃声模式switch(strRingerMode) { case AudioManager.RINGER_MODE_NORMAL: mTextView01.setText(R.string.str_normal_mode); break; case AudioManager.RINGER_MODE_SILENT: mTextView01.setText(R.string.str_silent_mode); break; case AudioManager.RINGER_MODE_VIBRATE: mTextView01.setText(R.string.str_vibrate_mode); break; }}else if(x>9){//正面向左}else if(x<-9){//正面向右}else if(y>9){//手掌正翻向自己直立}else if(y<-9){//手掌反翻向自己直立}else{//其他无法判断}break;}}}}; /*取得目前的AudioManager模式*/private void GetAudioManagerMode(){try{//建立AudioManager对象,取得AUDIO_SEVICEAudioManager audioManager=(AudioManager)getSystemService(Context.AUDIO_SERVICE);if(audioManager!=null){strRingerMode=audioManager.getRingerMode();}}catch(Exception e){mTextView01.setText(e.toString());e.printStackTrace();}}//更改为静音模式private void ChangeToSilentMode() { try{ AudioManager audioManager=(AudioManager)getSystemService(Context.AUDIO_SERVICE); if(audioManager!=null){ audioManager.setRingerMode(AudioManager.RINGER_MODE_SILENT); strRingerMode=audioManager.getRingerMode(); } }catch(Exception e){mTextView01.setText(e.toString());e.printStackTrace();}}private void ChangeToVibrateMode() { try{ AudioManager audioManager=(AudioManager)getSystemService(Context.AUDIO_SERVICE); if(audioManager!=null){ audioManager.setRingerMode(AudioManager.RINGER_MODE_VIBRATE); strRingerMode=audioManager.getRingerMode(); } }catch(Exception e){mTextView01.setText(e.toString());e.printStackTrace();}}private void ChangeToNormalMode() { try{ AudioManager audioManager=(AudioManager)getSystemService(Context.AUDIO_SERVICE); if(audioManager!=null){ audioManager.setRingerMode(AudioManager.RINGER_MODE_NORMAL); strRingerMode=audioManager.getRingerMode(); } }catch(Exception e){mTextView01.setText(e.toString());e.printStackTrace();}}protected void onResume(){/*使用SensorManager调用getDfaultSensor方法拿到加速重力感应* 的Sensor对象,因为本程序使用的是重力加速传感器所以参数为* Sensor.TYPE_ACCELEROMETER.使用SensorManager调用registerListener* 来注册,第三个参数是检测的灵敏精确度根据不同选择需求选择* 精确度。例如:SENSOR_DELAY_FASTEST 最灵敏 因为太快了没必要使用* SENSOR_DELAY_GAME 游戏开发中使用 *SENSOR_DELAY_NORMAL 正常速度 *SENSOR_DELAY_UI 最慢的速度* */mSensorManager01.registerListener(mSensorListener, mSensorManager01.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),SensorManager.SENSOR_DELAY_NORMAL);super.onResume();}protected void onPause(){mSensorManager01.unregisterListener(mSensorListener);super.onPause();}

}

那些无法讲述的悲伤和苍凉,

SensorEvnetListener及AudioManager整合应用

相关文章:

你感兴趣的文章:

标签云: