導航:首頁 > 操作系統 > android監聽撥號鍵

android監聽撥號鍵

發布時間:2023-05-27 08:32:33

1. android 中如何在Service中監聽按下的鍵是哪個鍵

rvice接收不到按鍵消息的。只有當前active的activity才能輪櫻扮接受到按鍵消息。
非活動狀態的activity/service監聽按鍵消息?這種程序不頌雹就是盜取密碼的木馬程序了?不修改系統代碼做不到。
android系統的設計不允許用戶程序處理end
call,而只能選擇通過改變end
call鍵按下時的行臘灶為,這個行為定義在settings裡面。

2. Android撥號電話被接起瞬間監聽回調函數是哪個

mPhone = PhoneFactory.getDefaultPhone();
mPhone.(mCallHandler, PHONE_STATE_CHANGED, null);
注冊以上函數即可,mCallHandler是一個Handler,電話狀態改變時會回調:
private Handler mCallHandler = new Handler() {
public void handleMessage(Message msg) {
switch (msg.what) {
case PHONE_STATE_CHANGED:
XXXXXXXXX(); //在此根據Call.State.XXX狀態來做相應處理
break;
}
}
};
註:需在源碼編譯,ECLIPSE下無 PhoneFactory類

3. 如何監聽android軟鍵盤的隱藏和消失

原理:自定義布局的onSizeChanged()方法,在其中增加一個監聽介面,當軟鍵盤顯示或隱藏使得布局尺寸發生改變,就能捕獲到這個事件。

具體方法如下:
首先,在清單文件Manifest.xml中的對應的Activity標簽內設置
android:windowSoftInputMode=」adjustResize」
作用是當軟鍵盤顯示或隱藏時,該Activity主窗口總是會被調整大小以便留出軟鍵盤的空間。唯有這樣才能保證布局觸發onSizeChanged()方法。

然後,自定義一個布局,具體是RelativeLayout、LinearLayout或是其它的,根據實際情況而定,自定義的目的是在其onSizeChanged()方法中增加一個監聽介面。這里給出一個自定義RelativeLayout布局代碼:

public class CustomRelativeLayout extends RelativeLayout {

private OnSizeChangedListener listener;

public CustomRelativeLayout(Context context) {
super(context);
}

public CustomRelativeLayout(Context context, AttributeSet attrs) {
super(context, attrs);
}

@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}

@Override
protected void onLayout(boolean changed, int l, int t, int r, int b) {
super.onLayout(changed, l, t, r, b);
}

@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {

Log.d(TAG.CUSTOM_VIEW, 「onSizeChanged」);
super.onSizeChanged(w, h, oldw, oldh);
if (listener != null) {
listener.onSizeChanged(w, h, oldw, oldh);
}
}

public void setOnSizeChangedListener(OnSizeChangedListener listener) {
this.listener = listener;
}

/** * Activity主窗口大小改變時的回調介面(本示例中,等價於軟鍵盤顯示隱藏時的回調介面) */
public interface OnSizeChangedListener {
public void onSizeChanged(int w, int h, int oldw, int oldh);
}
}

最後,在程序中使用此介面(xxx.setOnSizeChangedListener(…))即可實現監聽鍵盤隱藏或顯示事件。

4. android 怎樣監聽軟鍵盤關閉

我們在android手機上面有時候會遇到監聽手機軟鍵盤按鍵的時候,例如:我們在瀏覽器輸入url完畢後可以點擊軟鍵盤右下角的「GO」按鍵載入url頁面;在點擊搜索框的時候,點擊右下角的search符號鍵可以進行搜索;或者在全部數據輸入完畢後,點擊右下角的"done"就馬上進行下一步操作。




function 1:
重寫Activity的dispatchKeyEvent(KeyEvent event)方法,在其中監聽KeyEventKey.KEYCODE_ENTER鍵(右下角確定鍵),當此鍵按下的時候,隱藏輸入法軟鍵盤,設置edittext內容和載入webview內容。
@Override
public boolean dispatchKeyEvent(KeyEvent event) {
if(event.getKeyCode() == KeyEvent.KEYCODE_ENTER){
/*隱藏軟鍵盤*/
InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
if(inputMethodManager.isActive()){
inputMethodManager.hideSoftInputFromWindow(MainActivity.this.getCurrentFocus().getWindowToken(), 0);
edittext.setText("success");
webview.loadUrl(URL);
return true;
return super.dispatchKeyEvent(event);
}
function 2:
重寫dispatchKeyEvent(KeyEvent event)的方法感覺有點用牛刀的感覺,因為我們非常可能在這個方法中進行其他任務,所以我們可以使用OnKeyListener的方法來監聽軟鍵盤按鍵。
private OnKeyListener onKeyListener = new OnKeyListener() {
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
if(keyCode == KeyEvent.KEYCODE_ENTER){
/*隱藏軟鍵盤*/
InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
if(inputMethodManager.isActive()){
inputMethodManager.hideSoftInputFromWindow(v.getApplicationWindowToken(), 0);
edittext.setText("success");
webview.loadUrl(URL);
return true;
return false;
};
edittext.setOnKeyListener(onKeyListener);
function 3:
第三種方法我認為可以幫助程序員更精確的判斷右下角按鍵情況,以便應對更加復雜的情況。它可以幫助程序員依據當前郵件下為「GO」,「done」,「search」鍵的情況下做出更細分的操作。
edittext.setOnEditorActionListener(new TextView.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
/*判斷是否是「GO」鍵*/
if(actionId == EditorInfo.IME_ACTION_GO){
/*隱藏軟鍵盤*/
InputMethodManager imm = (InputMethodManager) v
.getContext().getSystemService(
Context.INPUT_METHOD_SERVICE);
if (imm.isActive()) {
imm.hideSoftInputFromWindow(
v.getApplicationWindowToken(), 0);
edittext.setText("success");
webview.loadUrl(URL);
return true;
return false;
});

5. 如何監聽Android電源鍵長按

如果要執行長按事件的話,必須先執行event.startTracking(); 然後onKeyLongPress(int, KeyEvent)才能被調到。更多內容 歡迎訪問:
是說在dispatchkeyevent里先執行event.startTracking(); 然後才super.dispatchKeyE……

你可以這樣子做:
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
super.onKeyDown(keyCode, event);
if(keyCode == KeyEvent.KEYCODE_POWER){
event.startTracking();
}
}

@Override
public boolean onKeyLongPress(int keyCode, KeyEvent event) {
return super.onKeyLongPress(keyCode, event);
}

這樣子你的onKeyLongPress方法就會被執行到了。

希望能對你有用!

6. 如何在android 中service後台監聽按鍵,比如監聽音量鍵

為了實現鍵盤的監控,從新開發一個輸入法是不現實的,一般的操作就是在系統的輸入法機制中添加介面回調。我們知道,再應用程序中拿到按鍵的回調一般是監聽onKeyDown的介面,如下所示:publicbooleanonKeyDown(intkeyCode,KeyEventevent)開發者就可以根據回調方法中的參數,keyCode與KeyEvent來判斷具體事件。但是,由於事件的回調機制在其的沙箱中運行,在其他應用中是無法拿到當前應用事件回調的。那麼我們就從上到下,具體的看看事件的傳遞機制。如下圖所示,用戶點擊後,軟鍵盤或物理按鍵的輸入驅動就會產生一個中斷,且向/dev/input/event*中寫入一個相應的信號量。Android操作系統則會循環的讀取其中的事件,再分發給WindowManagerServer。由WindowManagerServer根據事件的來源分發到各個不同的ViewGroup與View中,從而產生不同的OnClick、OnKeyDown和OnTouch等事件。這個時候很自然的想到,黑客們希望做鍵盤監控,一定會向Linux底層增加自定義的事件。這里我們使用的是Linux中的getevent獲得/dev/input/eventX設備匯報的事件,這個命令還會輸出所有event設備的基本信息。包括觸屏、按鍵、耳機插入等等。其基本用法如下:Usage:getevent[-t][-n][-sswitchmask][-S][-v[mask]][-d][-p][-i][-l][-q][-ccount][-r][device]-t:showtimestamps-n:don'tprintnewlines-s:printswitchstatesforgivenbits-S:printallswitchstates-v:verbositymask(errs=1,dev=2,name=4,info=8,vers=16,pos.events=32,props=64)-d:showHIDdescriptor,ifavailable-p:showpossibleevents(errs,dev,name,pos.events)-i:-l:-q:quiet(clearverbositymask)-c:-r:printrateeventsarereceived鍵入getevent後,我們能夠看到設備中的一些列輸入硬體驅動信息,同樣下面會出現很多輸入指令信號,通常情況下,這些信號量都在刷屏,如下圖所示:這些信號量的表示我們無法直接看懂,輸入getevent–l加入Label我們能夠看到一些添加的標簽,如下所示:其實這些Lable已經在其input.h頭文件中定義好,其中type的定義如下:/**Eventtypes*/#defineEV_SYN0x00#defineEV_KEY0x01#defineEV_REL0x02#defineEV_ABS0x03#defineEV_MSC0x04#defineEV_SW0x05#defineEV_LED0x11#defineEV_SND0x12#defineEV_REP0x14#defineEV_FF0x15#defineEV_PWR0x16#defineEV_FF_STATUS0x17#defineEV_MAX0x1f#defineEV_CNT(EV_MAX+1)一般來說,常用的是EV_KEY、EV_REL、EV_ABS、EV_SYN,分別對應鍵盤按鍵、相對坐標、絕對坐標、同步事件。EV_SYN則表示一組完整事件已經完成,需要處理,EV_SYN的code定義事件分發的類型。

7. android中怎麼實現按鍵監聽和觸屏監聽

按鍵監聽代碼:

@Override

public boolean onKeyDown(int keyCode, KeyEvent event) {

// TODO Auto-generated method stub

switch(keyCode){

case KeyEvent.KEYCODE_DPAD_UP:

y--;break;

case KeyEvent.KEYCODE_DPAD_LEFT:

x--;break;

case KeyEvent.KEYCODE_DPAD_DOWN:

y++;break;

case KeyEvent.KEYCODE_DPAD_RIGHT:

x++;break;

}

this.invalidate();

return true;

}

觸屏監聽代碼:

@Override

public boolean onTouchEvent(MotionEvent event) {

// TODO Auto-generated method stub

x=(int)event.getX();

y=(int)event.getY();

this.invalidate();

return true;

}

通過滑鼠可以使圖形任意移動。將apk文件下載到手機上就可以實現觸屏監聽。

8. Android怎樣監聽藍牙耳機的按鍵事件

其實對於Android系統,每次按鍵只會有一個唯一「鍵值」響應,使用起來感覺會模模糊糊的,但是其實對於系統來說是很清晰的。

AVRCP全稱(Audio/VideoRemoteControlProfile),是藍牙協議中的一個profile。從名字上就可以看出主要應用於Audio/Video控制。每個按鍵並不是獨立的,上-曲/下一曲是在正在播放音樂的時候才會有效,即才會向Android發送「鍵值」。

基於按鍵從Linux到Android分析具體對於的鍵值:

Linux掃描碼功能映射字串Android鍵值

00c8200 開始放音樂MEDIA_PLAYKEYCODE_MEDIA_PLAY

00c9201 停止放音樂MEDIA_PAUSEKEYCODE_MEDIA_PAUSE

00a3163 下一曲MEDIA_NEXTKEYCODE_MEDIA_NEXT

00a5165 上-曲MEDIA_PREVIOUSKEYCODE_MEDIA_PREVIOUS

Android應用代碼,完整測試應用:TeskKey。

總結:1號鍵會交替發送KEYCODE_MEDIA_PLAY/KEYCODE_MEDIA_PAUSE;2/3號鍵會在播放音樂時分別發送KEYCODE_MEDIA_PREVIOUS/.KEYCODE_MEDIA_NEXT。如果想要把藍牙耳機上的按鍵利用起來,可以在接收到KEYCODE_MEDIA_PLAY時播放無聲音樂以使能2/3號鍵。這樣就能完整接收3種鍵值了自行控制了。這個具體自行設計(測試代碼已經更新包含了)。

註:這種實現並不一定通用,比如我在深度定製的MIUI中測試,盡管啟動的TestKey應用,系統自帶的音樂播放器仍然能同時響應鍵值。

更新:

已經更新TestKey源碼,添加對藍牙耳機按鍵的監聽,實現方法就是上述中推測的方法,已經成功驗證過了。播放音樂參考《Android多媒體開發--資源文件播放》。效果圖:


問與答
1.這個只能在播放音樂的狀態下才能監聽到么?
答:根據上述的原理,這些按鍵也僅僅是應用在控制媒體時使用;且根據實際驗證沒有播放音樂時藍牙耳機的2/3號鍵是並沒有向Android設備發送鍵值(從底層Linux來看)。綜上所述,需要通過播放音樂來實現激活其向Android設備發送鍵值,針對這種情況可以播放一個「沒有聲音」的音樂文件來實現,這樣既可以監聽到2/3號鍵又可以不影響其它聲音的輸出。可以在前台時播放音樂,後台停止播放。

2.我現在主要是想監聽得到開關鍵(1號鍵)。 在做一個按下藍牙開關鍵後啟動一個語音識別的功能?
答:在我的測試條件下,1號鍵是可以正常監聽到的。1號鍵會交替發送KEYCODE_MEDIA_PLAY/KEYCODE_MEDIA_PAUSE鍵值。這個鍵不需要模擬播放音樂就可以正常的監聽到。

3.4號按鍵的監聽方法

答:所謂的4號按鍵,也就是指本文中的所測試型號的藍牙耳機上並沒有,但有可能其它型號的藍牙耳機上有。我沒有辦法測試驗證,所以這里就簡單敘述一下「新按鍵」的鍵值確定思路:1.先使用TestKey測試應用測試按鍵,測試Android上層是否可以得到對應鍵值。2.如果沒有得到,那麼就使用adbshellgetevent來看Linux底層可以不可以得到鍵值。然後根據按鍵從Linux到Android來確定Android上層使用的鍵值碼到底是多少。(當然,如果你實在不知道如何監聽,把藍牙耳機寄給我,我給你確定也行。:))

註:其實上述文章完全是根據按鍵從Linux到Android測試確定下來的。那是篇文章是剝開Android外殼來看「按鍵」事件的流程的,方法適用於所有輸入事件:各種按鍵/觸摸/物理鍵盤/滑鼠等待輸入設備。沒有一定的Linux開發經驗很難看懂和理解。

4.Android後台監聽按鍵怎麼實現

或:如何啟動一次應用後在後台一直監聽播放鍵因為有這樣一個場景在用戶開車的時候需按一下開關鍵就啟動語音識別的功能。

這個問題其實已經超出了本文討論的范圍,是Android系統對應用層的鍵盤事件(按鍵)的分發的問題了。正常情況下,按鍵只會向當前最端的應用分發鍵盤事件,也就是說在後台你邊音量鍵都監聽不了。

但是既然這種情況(後台應用監聽按鍵)的需求存在,那麼就一定有它存在的道理。比如「相機鍵」,按下後直接調出相機到最前台。從表面上看是相機響應了按鍵,但是從實現方法上來看,並不是通過鍵值來操作,必須通過其它方法,比如廣播或者其它等等。

明白了其中的道理後,那麼想要實現就好辦了。先看這個按鍵有沒有廣播,如要有接聽系統中發出來的廣播;如果沒有那麼對於定製系統可以自己在系統中添加一個廣播;總之,正常渠道是沒有辦法在後台監聽一些不應該是你監聽到的按鍵的。

更:查了一下,這個按鍵是有廣播的。這樣就可以後台響應了(不需要C/不需要root)。例子我就不試了,見Android官方例子RandomMusicPlayer。

其中的重點是這個廣播android.intent.action.MEDIA_BUTTON。

9. 如何在Android的service里進行按鍵的監聽

app中對於HOME鍵廣播事件的接收

首先,自定義一個BroadcastReceiver:

[java] view plain
class HomeKeyEventBroadCastReceiver extends BroadcastReceiver {

static final String SYSTEM_REASON = "reason";
static final String SYSTEM_HOME_KEY = "homekey";//home key
static final String SYSTEM_RECENT_APPS = "recentapps";//long home key

@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (action.equals(Intent.ACTION_CLOSE_SYSTEM_DIALOGS)) {
String reason = intent.getStringExtra(SYSTEM_REASON);
if (reason != null) {
if (reason.equals(SYSTEM_HOME_KEY)) {
// home key處理點

} else if (reason.equals(SYSTEM_RECENT_APPS)) {
// long home key處理點
}
}
}
}
}
其次,生成且注冊之
[java] view plain
receiver = new HomeKeyEventBroadCastReceiver();
registerReceiver(receiver, new IntentFilter(Intent.ACTION_CLOSE_SYSTEM_DIALOGS));
這樣,我們就可以在app中進行HOME鍵的處理了!

閱讀全文

與android監聽撥號鍵相關的資料

熱點內容
手機淘寶登錄怎麼加密碼 瀏覽:481
linux快捷方式圖標 瀏覽:33
陽光車險的app叫什麼名字 瀏覽:461
購買單片機的器件時需要給商家啥 瀏覽:534
並行編譯技術的發展 瀏覽:547
阿里雲伺服器安裝管理 瀏覽:549
java手機開發教程 瀏覽:673
我的世界怎麼刪除伺服器數據 瀏覽:669
linux內存子系統 瀏覽:972
加密思維幣 瀏覽:690
魅族訪客文件夾 瀏覽:52
添加的文件夾怎麼找 瀏覽:617
程序員涉黃 瀏覽:700
maven編譯resources下的js 瀏覽:521
ubuntu文件移動命令 瀏覽:229
安卓i怎麼查找蘋果手機 瀏覽:951
雲伺服器宕機概率 瀏覽:232
在線買葯用什麼app知乎 瀏覽:815
ubuntu解壓xz文件 瀏覽:676
宏傑加密時電腦關機 瀏覽:390