1. android怎麼實現後台對按鍵事件的監控
為了實現鍵盤的監控,從新開發一個輸入法是不現實的,一般的操作就是在系統的輸入法機制中添加介面回調。我們知道,再應用程序中拿到按鍵的回調一般是監聽onKeyDown的介面,如下所示:
public boolean onKeyDown(int keyCode, KeyEvent event)
開發者就可以根據回調方法中的參數, keyCode與KeyEvent來判斷具體事件。但是,由於事件的回調機制在其的沙箱中運行,在其他應用中是無法拿到當前應用事件回調的。
那麼我們就從上到下,具體的看看事件的傳遞機制。如下圖所示,用戶點擊後,軟鍵盤或物理按鍵的輸入驅動就會產生一個中斷,且向/dev/input/event*中寫入一個相應的信號量。Android操作系統則會循環的讀取其中的事件,再分發給WindowManagerServer。由WindowManagerServer根據事件的來源分發到各個不同的ViewGroup與View中,從而產生不同的OnClick、OnKeyDown和OnTouch等事件。
其實這些Lable已經在其input.h頭文件中定義好,其中type的定義如下:
/*
* Event types
*/
#define EV_SYN 0x00
#define EV_KEY 0x01
#define EV_REL 0x02
#define EV_ABS 0x03
#define EV_MSC 0x04
#define EV_SW 0x05
#define EV_LED 0x11
#define EV_SND 0x12
#define EV_REP 0x14
#define EV_FF 0x15
#define EV_PWR 0x16
#define EV_FF_STATUS 0x17
#define EV_MAX 0x1f
#define EV_CNT (EV_MAX+1)
一般來說,常用的是EV_KEY、EV_REL、EV_ABS、EV_SYN,分別對應鍵盤按鍵、相對坐標、絕對坐標、同步事件。EV_SYN則表示一組完整事件已經完成,需要處理,EV_SYN的code定義事件分發的類型。
2. (Android系統開發)Android觸摸的提示音的音量的修改
提供下參考 有這么幾個類AudioManager SoundPool。
我提供一段我們項目中的代碼,各作用其餘的你自己相關搜索下
/**
* 播放音效
*/
@TargetApi(8)
public static void PlaySoundEffect(final SeekerActivity activity, int wavid){
final SoundPool sp = new SoundPool(20, AudioManager.STREAM_MUSIC, 100);
sp.load(activity, wavid ,1);
sp.setOnLoadCompleteListener(new OnLoadCompleteListener() {
public void onLoadComplete(SoundPool soundPool, int sampleId, int status) {
AudioManager am = (AudioManager)activity.getSystemService(Context.AUDIO_SERVICE);
float streamVolumeCurrent = am.getStreamVolume(AudioManager.STREAM_MUSIC);
float streamVolumeMax = am.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
float volume = streamVolumeCurrent/streamVolumeMax;
sp.play(1, volume, volume, 0, 0, 1);
}
}
wavid為你對應的音效資源id,play()方法調用時設置音量大小。
方法有很多,不限於這一個。