Android相关内容:

  • Android的网页视图为什么会黑屏显示?
  • android里当进度对话框和后台线程活动的时候如何处理屏幕的方向的变化?
  • android怎么在Activity中多次调用OnCreat()
  • android怎么创建出折叠效果的textview
  • 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();
}
}

更多相关文章

  1. Android(安卓)5.1和Android(安卓)5.0相比有哪些变化
  2. Android渗透测试Android渗透测试入门教程大学霸
  3. Android(安卓)鲜为人知的 8 个小秘密
  4. Android手机重启的核心代码
  5. android检查手机网络状态
  6. Android(安卓)代码实现应用强制装到手机内存
  7. Android(安卓)Debug Bridge | Android(安卓)Developers
  8. android API版本对应的系统版本及Android获取手机和系统版本等信
  9. Android调用系统设置,Android调用系统设置中的某个设置

随机推荐

  1. Android(安卓)Audio Debug相关方法
  2. Gallery练习(android)
  3. 在android中利用多线程实现对控件的更新(
  4. 零基础入门Linux
  5. 使用科大讯飞提供的SDK实现android语音识
  6. Android集成Zxing实现二维码扫描识别,过程
  7. Android的Master/Detail风格界面中实现自
  8. 获取Android设备的唯一识别码|设备号|序号|U
  9. 【Android(安卓)开发教程】显示复杂对话
  10. Android学习笔记(十六)进度条