知識社群
登入
中文(台灣)
English(US)
Q&A
線上人數:
408
回首頁
最新活動
(34)
公佈欄
最新公告
近期課程
技術專欄
Android
嵌入式Linux
韌體設計
FPGA / Verilog
站上資源
線上教學
文件總覽
廠商徵才
專業論壇
(1315)
推廣成果
學員專題
Android I/O Workshop
Android 企業產訓專班
活動花絮
(58)
專班學員資訊平台
102年嵌入式軟韌體設計工程師養成班
102年JAVA程式設計班
102Linux網路工程師-LPI認證養成班
嵌入式Linux就業班第二梯次
嵌入式Linux就業班第三梯次
101年 Android設計班(2)
101年 Android設計班(1)
公告
艾鍗學院成立滿十週年了!十年一遇的超值回饋,獻給堅持學習的你~
(03-12)
【2019下半年課程行事曆】政府+企業雙重補助,AI人才養成計劃開跑
(07-10)
IT TRAINING 2019上半年最新技術培訓一覽
(03-13)
[
more
]
最新消息
文件分類
[
總覽
]
廠商徵才資訊
(215)
學員專題成果
(31)
研討會活動專區
(5)
Android 專欄
(19)
活動簡報檔
(2)
線上教學 Training Video
(24)
韌體設計相關
(17)
Embedded LInux 專欄
(54)
Raspberry Pi
(4)
FPGA/Verilog 專欄
(14)
小品文章
(37)
未分類文件
(28)
101年 Android 應用軟體設計班
(4)
基礎C程式&資料結構
(8)
嵌入式Linux就業班第二梯次
(20)
101年臺北市政府勞工局職業訓練中心-Android APP 軟體開發人才培訓就業班
(16)
102年Linux網路工程師-LPI認證養成班
(9)
102年JAVA程式設計班
(2)
102年嵌入式軟韌體設計工程師養成班
(6)
Access VBA
(5)
Excel VBA
(4)
產業訊息
(2)
PCB Layout
(7)
電子電路
(6)
專班文件區
嵌入式Linux就業班第三梯次
(13)
社群資訊
訪客: 3179918
文章: 557
討論: 1315
公告: 31
容量: 剩餘
2.4 GB
(4 GB)
閱讀權限: 開放
分類:
教育學習 / 軟體系統
版主: 艾鍗學院
副版主: 無
位置:
艾鍗學院 Blog
>
專業論壇
>
討論
android Service中可以使用onkeydown偵測音量鍵嗎?
(Jimmy,
jimmy.lee.taiwan@gmail.com
, 2011-08-18 15:45)
1樓
版上的同學 大家好!
目前我正在寫一各android的功能叫onKeyDown
我想要在長按音量鈕(>3秒)後能夠啟動一各class(
在下面的程式碼中我先以toast代替這各class)
由於要能夠長駐背景
所以我把偵測長按音量鈕的程式碼放在service裡面
不過程式執行到onKeyDown()這一段沒有反應,
我還在onkeydown()後面放了一各ff()測試,
這ff()是會被run然後跳出"測試ff是否被執行",
這代表在我的程式碼中,onKeyDown()無法執行
可以請教這是什麼原因嗎?
謝謝
==============================
=============
package com.myvoulume;
import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.view.KeyEvent;
import android.widget.Toast;
public class MyVolumeBackground extends Service {
@Override
public IBinder onBind(Intent intent) {
return null;
}
public void onCreate(){
super.onCreate();
Toast.makeText(this, "On Create...", Toast.LENGTH_SHORT).show();
}
public void onStart(Intent intent, int startID){
super.onStart(intent, startID);
Toast.makeText(this, "On Start...", Toast.LENGTH_SHORT).show();
onKeyDown(startID, null);
ff();
}
public void ff(){
Toast.makeText(this, "測試ff是否被執行", Toast.LENGTH_SHORT).show();
}
public boolean onKeyDown(int keyCode, KeyEvent event) {
if(keyCode==KeyEvent.KEYCODE_
VOLUME_UP){
Toast.makeText(this, "按下了上音量鍵", Toast.LENGTH_SHORT).show();
return true;
}else if(keyCode==KeyEvent.KEYCODE_
VOLUME_DOWN){
Toast.makeText(this, "按下了下音量鍵", Toast.LENGTH_SHORT).show();
// return true;
}
return true;
}
public void onDestroy(){
super.onDestroy();
}
}
==============================
=============
(Jarey, 2011-08-20 09:10)
2樓
Hi Jimmy:
在Android中Services是在後台運行的服務,並沒有直接與前台用戶互動的介面,因此
Services是無法單獨取得到Key Event. 你在Services中 的
onKeyDown(int keyCode, KeyEvent event)
函式,將會被當成一般的函式,而不是overriding method.
如果你需要抓KeyEvent至Services互動使用.那麼你必須要先有一個Activity在前台抓取Key Event後在
傳遞給後台Services使用.
目前也只有自行建立的InputMethod,才有能力在後台也可以抓取到Hard Key Event.但這也是要在用戶切
換去使用你的InputMethod的情況下才會抓的到Key.
之所以會有如此的限制也是基於安全性的考量,試想: 如果在背景的Services也可以隨時抓取到用戶的KeyEvent
那麼就會有很多類似建盤側錄的惡軟體,當你在前面要登入網路銀行輸入帳號密碼時,你應該不會想要讓後台的Services
也可以讀取到你輸入的帳號和密碼才是.
BR.
Kyle.
(Jarey, 2011-08-20 09:23)
3樓
補充一下,如果要在背景偵測一些Hard key Event,大概只靠系統發出的BroadCastReciever
你可以參考SDK的檔案中的broadcast_action.txt,裡面有所有Android系統發出的broadcast事件
platforms\android-10\data\broadcast_actions.txt
但目前我看到的關於Audio的大概只有針對藍芽的audio state changed.可能沒有你需要的音量鍵大小聲的broadcast
android.media.SCO_AUDIO_STATE_CHANGED
(Jimmy,
jimmy.lee.taiwan@gmail.com
, 2011-08-20 16:10)
4樓
謝謝你阿
因為我對java不熟,
這樣子我知道拉
我在想想
用action.SCREEN_ON的方式
改用偵測電源鍵長按的方式看看
試成功在PO上來
因為我對java不熟,
這樣子我知道拉
我在想想
用action.SCREEN_ON的方式
改用偵測電源鍵長按的方式看看
試成功在PO上來