Android實現根據條件自動轉換手機震動和響鈴

來源:互聯網
上載者:User

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();
}
}

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.