zoukankan      html  css  js  c++  java
  • Android实现根据条件自动转换手机震动和响铃

    Android相关内容:

    这个例子实现的是根据手机的”状态“改变手机现在的模式。
    当手机正面朝上时,手机处于响铃的状态,当手机背面朝上时,手机处于静音的状态。
    实现这个例子需要用到手机内置的传感器,并实现相应的方法判断手机的状态。同时还需要用到手机的AudioManager类改变手机的模式。
    首先,我么需要在AndroidManifest.xml文件中添加如下的代码:
    <uses-permission android:name="android.permission.VIBRATE"/>

    这行代码的功能是使得程序可以使用手机的震动模式。
    下面给出具体的实现代码和相应的注释:
    [java] view plaincopy
    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();
    }
    }

  • 相关阅读:
    RGB888转RGB666
    bmp文件格式详细解析
    Qt 5简介
    IntelliJ IDEA 快捷键
    猫猫学iOS之小知识之_xcode插件的删除方法_自己主动提示图片插件KSImageNamed有时不灵_分类或宏之类不能自己主动提示,
    sql server 2008出现远程过程调用失败
    Oracle-31-对视图DML操作
    uva 11127(暴力)
    各种排序算法的分析与实现
    我的Android进阶之旅------&gt;怎样解决Android 5.0中出现的警告: Service Intent must be explicit:
  • 原文地址:https://www.cnblogs.com/sky7034/p/2915166.html
Copyright © 2011-2022 走看看