这个例子实现的是根据手机的”状态“改变手机现在的模式。
当手机正面朝上时,手机处于响铃的状态,当手机背面朝上时,手机处于静音的状态。
实现这个例子需要用到手机内置的传感器,并实现相应的方法判断手机的状态。同时还需要用到手机的AudioManager类改变手机的模式。
首先,我么需要在AndroidManifest.xml文件中添加如下的代码:
- <uses-permission android:name="android.permission.VIBRATE"/>
这行代码的功能是使得程序可以使用手机的震动模式。
下面给出具体的实现代码和相应的注释:
- public class EX06_12 extends Activity
- {
- /* 建立SensorManager对象 */
- private SensorManager mSensorManager01;
- private TextView mTextView01;
- /* 以私有类成员保存AudioManager模式 */
- private int strRingerMode;
- /** Called when the activity is first created. */
- @Override
- public void onCreate(Bundle savedInstanceState)
- {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- mTextView01 = (TextView)findViewById(R.id.myTextView1);
- /* 建立SensorManager对象,取得SENSOR_SERVICE服务 */
- try
- {
- mSensorManager01 = (SensorManager)getSystemService(Context.SENSOR_SERVICE);
- }
- catch(Exception e)
- {
- e.printStackTrace();
- }
- /* 取得现有的AudioManager模式 */
- GetAudioManagerMode();
- /* 依据现有的AudioManager模式,显示于TextView当中 */
- 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捕捉onSensorChanged事件 */
- private final SensorEventListener mSensorListener = new SensorEventListener()
- {
- private float x, y, z;
- @Override
- public void onAccuracyChanged(Sensor sensor, int accuracy)
- {
- // TODO Auto-generated method stub
- }
- @Override
- public void onSensorChanged(SensorEvent event)
- {
- // TODO Auto-generated method stub
- synchronized(mSensorManager01)
- {
- switch (event.sensor.getType())
- {
- case Sensor.TYPE_ACCELEROMETER:
- x = event.values[0];
- y = event.values[1];
- z = event.values[2];
- if(z>9)
- {
- /* 正面向上 */
- //mTextView01.setText("Face Up");
- /* 变更为正常模式 */
- 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)
- {
- /* 正面向下 */
- //mTextView01.setText("Face Down");
- /* 先设定为静音模式 */
- 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)
- {
- /* 正面向左 */
- //mTextView01.setText("Left Side");
- }
- else if(x<-9)
- {
- /* 正面向右 */
- //mTextView01.setText("Right Side");
- }
- else if(y>9)
- {
- /* 手掌正翻向自己直立 */
- //mTextView01.setText("Standing Up");
- }
- else if(y<-9)
- {
- /* 手掌反翻反向直立 */
- //mTextView01.setText("On Head");
- }
- else
- {
- /* 其他无法判別 */
- //mTextView01.setText("In Between");
- }
- break;
- }
- }
- }
- };
- /* 取得当前的AudioManager模式 */
- private void GetAudioManagerMode()
- {
- try
- {
- /* 建立AudioManager对象,取得AUDIO_SERVICE */
- AudioManager audioManager = (AudioManager)getSystemService(Context.AUDIO_SERVICE);
- if (audioManager != null)
- {
- /* RINGER_MODE_NORMAL | RINGER_MODE_SILENT | RINGER_MODE_VIBRATE */
- 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)
- {
- /* RINGER_MODE_NORMAL | RINGER_MODE_SILENT | RINGER_MODE_VIBRATE */
- 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)
- {
- /* 调用setRingerMode方法,设定模式 */
- audioManager.setRingerMode(AudioManager.RINGER_MODE_VIBRATE);
- /* RINGER_MODE_NORMAL | RINGER_MODE_SILENT | 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)
- {
- /* RINGER_MODE_NORMAL | RINGER_MODE_SILENT | RINGER_MODE_VIBRATE */
- audioManager.setRingerMode(AudioManager.RINGER_MODE_NORMAL);
- strRingerMode = audioManager.getRingerMode();
- }
- }
- catch(Exception e)
- {
- mTextView01.setText(e.toString());
- e.printStackTrace();
- }
- }
- @Override
- protected void onResume()
- {
- // TODO Auto-generated method stub
- mSensorManager01.registerListener
- (
- mSensorListener,
- mSensorManager01.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),
- SensorManager.SENSOR_DELAY_NORMAL
- );
- super.onResume();
- }
- @Override
- protected void onPause()
- {
- // TODO Auto-generated method stub
- /* 重写onPause事件,取消mSensorListener */
- mSensorManager01.unregisterListener(mSensorListener);
- super.onPause();
- }
- }
转载 http://wangleyiang.iteye.com/blog/1773200