Android--SensorEventListener和AudioManager实现根据条件转换手机震动和响铃

来源:互联网 发布:程序员英语 编辑:程序博客网 时间:2024/05/06 20:51

Android--SensorEventListener和AudioManager实现根据条件转换手机震动和响铃

 

这个例子实现的是根据手机的”状态“改变手机现在的模式。

当手机正面朝上时,手机处于响铃的状态,当手机背面朝上时,手机处于静音的状态。

实现这个例子需要用到手机内置的传感器,并实现相应的方法判断手机的状态。同时还需要用到手机的AudioManager类改变手机的模式。

首先,我么需要在AndroidManifest.xml文件中添加如下的代码:

Html代码  收藏代码
  1. <uses-permission android:name="android.permission.VIBRATE"/>  

这行代码的功能是使得程序可以使用手机的震动模式。

下面给出具体的实现代码和相应的注释:

Java代码  收藏代码
  1. public class EX06_12 extends Activity  
  2. {  
  3.   /* 建立SensorManager对象 */  
  4.   private SensorManager mSensorManager01;  
  5.   private TextView mTextView01;  
  6.     
  7.   /* 以私有类成员保存AudioManager模式 */  
  8.   private int strRingerMode;  
  9.     
  10.   /** Called when the activity is first created. */  
  11.   @Override  
  12.   public void onCreate(Bundle savedInstanceState)  
  13.   {  
  14.     super.onCreate(savedInstanceState);  
  15.     setContentView(R.layout.main);  
  16.       
  17.     mTextView01 = (TextView)findViewById(R.id.myTextView1);  
  18.       
  19.     /* 建立SensorManager对象,取得SENSOR_SERVICE服务 */  
  20.     
  21.     try  
  22.     {  
  23.       mSensorManager01 = (SensorManager)getSystemService(Context.SENSOR_SERVICE);  
  24.     }  
  25.     catch(Exception e)  
  26.     {  
  27.       e.printStackTrace();  
  28.     }  
  29.       
  30.     /* 取得现有的AudioManager模式 */  
  31.     GetAudioManagerMode();  
  32.       
  33.     /* 依据现有的AudioManager模式,显示于TextView当中 */  
  34.     switch(strRingerMode)  
  35.     {  
  36.       /* 正常模式 */  
  37.       case AudioManager.RINGER_MODE_NORMAL:  
  38.         mTextView01.setText(R.string.str_normal_mode);  
  39.         break;  
  40.       /* 静音模式 */  
  41.       case AudioManager.RINGER_MODE_SILENT:  
  42.         mTextView01.setText(R.string.str_silent_mode);  
  43.         break;  
  44.       /* 震动模式 */  
  45.       case AudioManager.RINGER_MODE_VIBRATE:  
  46.         mTextView01.setText(R.string.str_vibrate_mode);  
  47.         break;  
  48.     }  
  49.   }  
  50.     
  51.   /* 建立SensorListener捕捉onSensorChanged事件 */  
  52.   private final SensorEventListener mSensorListener = new SensorEventListener()  
  53.   {  
  54.     private float x, y, z;  
  55.       
  56.     @Override  
  57.     public void onAccuracyChanged(Sensor sensor, int accuracy)  
  58.     {  
  59.       // TODO Auto-generated method stub  
  60.     }  
  61.       
  62.     @Override  
  63.     public void onSensorChanged(SensorEvent event)  
  64.     {  
  65.       // TODO Auto-generated method stub  
  66.       synchronized(mSensorManager01)  
  67.       {  
  68.         switch (event.sensor.getType())  
  69.         {  
  70.         case Sensor.TYPE_ACCELEROMETER:  
  71.           x = event.values[0];  
  72.           y = event.values[1];  
  73.           z = event.values[2];  
  74.           if(z>9)  
  75.           {  
  76.             /* 正面向上 */  
  77.             //mTextView01.setText("Face Up");  
  78.             /* 变更为正常模式 */  
  79.             ChangeToNormalMode();  
  80.               
  81.             /* 调用变更模式后,再一次确认手机的模式为何 */  
  82.             switch(strRingerMode)  
  83.             {  
  84.               case AudioManager.RINGER_MODE_NORMAL:  
  85.                 mTextView01.setText(R.string.str_normal_mode);  
  86.                 break;  
  87.               case AudioManager.RINGER_MODE_SILENT:  
  88.                 mTextView01.setText(R.string.str_silent_mode);  
  89.                 break;  
  90.               case AudioManager.RINGER_MODE_VIBRATE:  
  91.                 mTextView01.setText(R.string.str_vibrate_mode);  
  92.                 break;  
  93.             }  
  94.           }  
  95.           else if(z<-9)  
  96.           {  
  97.             /* 正面向下 */  
  98.             //mTextView01.setText("Face Down");  
  99.               
  100.             /* 先设定为静音模式 */  
  101.             ChangeToSilentMode();  
  102.               
  103.             /* 再设定为震动模式 */  
  104.             ChangeToVibrateMode();  
  105.               
  106.             /* 判断铃声模式 */  
  107.             switch(strRingerMode)  
  108.             {  
  109.               /* 正常模式 */  
  110.               case AudioManager.RINGER_MODE_NORMAL:  
  111.                 mTextView01.setText(R.string.str_normal_mode);  
  112.                 break;  
  113.               /* 静音模式 */  
  114.               case AudioManager.RINGER_MODE_SILENT:  
  115.                 mTextView01.setText(R.string.str_silent_mode);  
  116.                 break;  
  117.               /* 震动模式 */  
  118.               case AudioManager.RINGER_MODE_VIBRATE:  
  119.                 mTextView01.setText(R.string.str_vibrate_mode);  
  120.                 break;  
  121.             }  
  122.           }  
  123.           else if(x>9)  
  124.           {  
  125.             /* 正面向左 */  
  126.             //mTextView01.setText("Left Side");  
  127.           }  
  128.           else if(x<-9)  
  129.           {  
  130.             /* 正面向右 */  
  131.             //mTextView01.setText("Right Side");  
  132.           }  
  133.           else if(y>9)  
  134.           {  
  135.             /* 手掌正翻向自己直立 */  
  136.             //mTextView01.setText("Standing Up");  
  137.           }  
  138.           else if(y<-9)  
  139.           {  
  140.             /* 手掌反翻反向直立 */  
  141.             //mTextView01.setText("On Head");  
  142.           }  
  143.           else  
  144.           {  
  145.             /* 其他无法判別 */  
  146.             //mTextView01.setText("In Between");  
  147.           }  
  148.           break;  
  149.         }  
  150.       }  
  151.     }  
  152.   };  
  153.   
  154.     
  155.   /* 取得当前的AudioManager模式 */  
  156.   private void GetAudioManagerMode()  
  157.   {  
  158.     try  
  159.     {  
  160.       /* 建立AudioManager对象,取得AUDIO_SERVICE */  
  161.       AudioManager audioManager = (AudioManager)getSystemService(Context.AUDIO_SERVICE);  
  162.       if (audioManager != null)  
  163.       {  
  164.         /* RINGER_MODE_NORMAL | RINGER_MODE_SILENT  | RINGER_MODE_VIBRATE */  
  165.         strRingerMode = audioManager.getRingerMode();  
  166.       }  
  167.     }  
  168.     catch(Exception e)  
  169.     {  
  170.       mTextView01.setText(e.toString());  
  171.       e.printStackTrace();  
  172.     }  
  173.   }  
  174.     
  175.   /* 变更为静音模式 */  
  176.   private void ChangeToSilentMode()  
  177.   {  
  178.     try  
  179.     {  
  180.       AudioManager audioManager = (AudioManager)getSystemService(Context.AUDIO_SERVICE);  
  181.       if (audioManager != null)  
  182.       {  
  183.         /* RINGER_MODE_NORMAL | RINGER_MODE_SILENT  | RINGER_MODE_VIBRATE */  
  184.         audioManager.setRingerMode(AudioManager.RINGER_MODE_SILENT);  
  185.         strRingerMode = audioManager.getRingerMode();  
  186.       }  
  187.     }  
  188.     catch(Exception e)  
  189.     {  
  190.       mTextView01.setText(e.toString());  
  191.       e.printStackTrace();  
  192.     }  
  193.   }  
  194.     
  195.   /* 变更为震动模式 */  
  196.   private void ChangeToVibrateMode()  
  197.   {  
  198.     try  
  199.     {  
  200.       AudioManager audioManager = (AudioManager)getSystemService(Context.AUDIO_SERVICE);  
  201.       if (audioManager != null)  
  202.       {  
  203.         /* 调用setRingerMode方法,设定模式 */  
  204.         audioManager.setRingerMode(AudioManager.RINGER_MODE_VIBRATE);  
  205.         /* RINGER_MODE_NORMAL | RINGER_MODE_SILENT  | RINGER_MODE_VIBRATE */  
  206.         strRingerMode = audioManager.getRingerMode();  
  207.       }  
  208.     }  
  209.     catch(Exception e)  
  210.     {  
  211.       mTextView01.setText(e.toString());  
  212.       e.printStackTrace();  
  213.     }  
  214.   }  
  215.     
  216.   /* 变更为正常模式 */  
  217.   private void ChangeToNormalMode()  
  218.   {  
  219.     try  
  220.     {  
  221.       AudioManager audioManager = (AudioManager)getSystemService(Context.AUDIO_SERVICE);  
  222.       if (audioManager != null)  
  223.       {  
  224.         /* RINGER_MODE_NORMAL | RINGER_MODE_SILENT  | RINGER_MODE_VIBRATE */  
  225.         audioManager.setRingerMode(AudioManager.RINGER_MODE_NORMAL);  
  226.         strRingerMode = audioManager.getRingerMode();  
  227.       }  
  228.     }  
  229.     catch(Exception e)  
  230.     {  
  231.       mTextView01.setText(e.toString());  
  232.       e.printStackTrace();  
  233.     }  
  234.   }  
  235.     
  236.   @Override  
  237.   protected void onResume()  
  238.   {  
  239.     // TODO Auto-generated method stub  
  240.     mSensorManager01.registerListener   
  241.     (   
  242.       mSensorListener,   
  243.       mSensorManager01.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),   
  244.       SensorManager.SENSOR_DELAY_NORMAL  
  245.     );  
  246.     super.onResume();  
  247.   }  
  248.     
  249.   @Override  
  250.   protected void onPause()  
  251.   {  
  252.     // TODO Auto-generated method stub  
  253.       
  254.     /* 重写onPause事件,取消mSensorListener */  
  255.     mSensorManager01.unregisterListener(mSensorListener);  
  256.     super.onPause();  
  257.   }  
  258. }  


转载 http://wangleyiang.iteye.com/blog/1773200


原创粉丝点击