android 锁屏音量,Android锁屏状态获取音量按键事件
Android系統沒有提供音量按鍵的廣播,而Activity的onKeyDown方法只有在界面顯示時才能捕獲音量變化,
要在鎖屏狀態或后臺獲得音量按鍵事件,可以通過判斷音量值的改變來判斷是否按下了音量鍵。實現的具體思路是:
開一個子線程,持續判斷當前音量值和之前音量值是否一致,如果不同說明按下了音量鍵,并且重置音量值,使音量不在最大值或最小值上。
package com.hy2014.phonesafer.activity;
import android.app.Activity;
import android.content.Context;
import android.media.AudioManager;
import android.os.Bundle;
/**
*
* @author Dawin Create 2015-01-19
*/
public class VolumeChangeActivity extends Activity
{
/**
* 當前音量
*/
private int currentVolume;
/**
* 控制音量的對象
*/
public AudioManager mAudioManager;
/**
* 系統最大音量
*/
private int maxVolume;
/**
* 確保關閉程序后,停止線程
*/
private boolean isDestroy;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
isDestroy = false;
// 獲得AudioManager對象
mAudioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);//音樂音量,如果要監聽鈴聲音量變化,則改為AudioManager.STREAM_RING
maxVolume = mAudioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
}
@Override
protected void onDestroy()
{
super.onDestroy();
isDestroy = true;
}
/**
* 監聽音量按鍵的線程
*/
private Thread volumeChangeThread;
/**
* 持續監聽音量變化 說明: 當前音量改變時,將音量值重置為最大值減2
*/
public void onVolumeChangeListener()
{
currentVolume = mAudioManager.getStreamVolume(AudioManager.STREAM_MUSIC);
volumeChangeThread = new Thread()
{
public void run()
{
while (!isDestroy)
{
int count = 0;
boolean isDerease = false;
// 監聽的時間間隔
try
{
Thread.sleep(20);
} catch (InterruptedException e)
{
System.out.println("error in onVolumeChangeListener Thread.sleep(20) " + e.getMessage());
}
if (currentVolume < mAudioManager.getStreamVolume(AudioManager.STREAM_MUSIC))
{
count++;
currentVolume = mAudioManager.getStreamVolume(AudioManager.STREAM_MUSIC);
// 設置音量等于 maxVolume-2的原因是:當音量值是最大值和最小值時,按音量加或減沒有改變,所以每次都設置為固定的值。
mAudioManager.setStreamVolume(AudioManager.STREAM_MUSIC, maxVolume - 2,
AudioManager.FLAG_REMOVE_SOUND_AND_VIBRATE);
}
if (currentVolume > mAudioManager.getStreamVolume(AudioManager.STREAM_MUSIC))
{
count++;
currentVolume = mAudioManager.getStreamVolume(AudioManager.STREAM_MUSIC);
mAudioManager.setStreamVolume(AudioManager.STREAM_MUSIC, maxVolume - 2,
AudioManager.FLAG_REMOVE_SOUND_AND_VIBRATE);
if (count == 1)
{
isDerease = true;
}
}
if (count == 2)
{
System.out.println("按下了音量+");
} else if (isDerease)
{
System.out.println("按下了音量-");
}
}
};
};
volumeChangeThread.start();
}
}
總結
以上是生活随笔為你收集整理的android 锁屏音量,Android锁屏状态获取音量按键事件的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: flash as3 android ai
- 下一篇: html 文字输出语音,html 录音与