android事件監聽
① 在android中怎樣給整個頁面設置監聽事件
您可以類似這樣,先實例化子頁面中的Button控制項,然後將實例化後的控制項綁定監聽事件 View view=LayoutInflater.from(context).inflate(R.layout.abc_action_bar_view_list_nav_layout,null); Button button= (Button) view.findViewById(R.id.action_bar); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { //寫上點擊後要執行的事件 } }); 當然了,您要在不同頁面實現不同的功能的話,您可以將以上代碼寫在viewPager.setOnPageChangeListener的滾動回調方法當中進行頁面滾動的判斷,從而執行不同的點擊事件。希望能幫到您,如果還有什麼問題,歡迎您繼續追問。謝謝。
② android程序如何監聽到自己被卸載這個事件。
手段略曲折
首先給你的程序注冊讀取log許可權,
<uses-permissionandroid:name="android.permission.READ_LOGS"/>
然後在你的程序里開一個後台線程,不停的讀取log,當你的應用(包括其他任何應用)被卸載時,系統的ActivityManager會列印出一行log,大概是removing:你的包名。這個時機是在卸載界面點擊確定後的一瞬間觸發的,如下圖
但是不能保證用戶就會點確定真把你的卸載了。。所以自己權衡吧。
這是我在網上找到的唯一方法
代碼如下:
privatevoidListenLog(){
Threadt=newThread(newRunnable(){
publicvoidrun(){
//TODOAuto-generatedmethodstub
Log.v("Fuck","Startlisteninglog");
String[]cmds={"logcat","-c"};
StringshellCmd="logcat";
Processprocess=null;
InputStreamis=null;
DataInputStreamdis=null;
Stringline="";
Runtimeruntime=Runtime.getRuntime();
try{
intwaitValue;
waitValue=runtime.exec(cmds).waitFor();
process=runtime.exec(shellCmd);
is=process.getInputStream();
dis=newDataInputStream(is);
while((line=dis.readLine())!=null&&mKeepListenFlag){
if(!line.contains("Fuck")){
Log.v("Fuck",line);
//這里只是把每個log都列印了一遍,可以再此判斷line里是否有removing字樣,然後做些處理
}
}
Log.v("Fuck","finishedlisten");
}catch(InterruptedExceptione){
e.printStackTrace();
}catch(IOExceptionie){
ie.printStackTrace();
}finally{
try{
if(dis!=null){
dis.close();
}
if(is!=null){
is.close();
}
if(process!=null){
process.destroy();
}
}catch(Exceptione){
e.printStackTrace();
}
}
}
});
//mKeepListenFlag是個成員變數,是為了讓程序結束時終止線程的,否則可能產生程序多次啟動,然後這個線程就啟動了多個。Android線程可不會因為Activity的退出而終止。
mKeepListenFlag=true;
t.start();
}
③ android 監聽事件 OnCheckedChangeListener是干什麼的
OnCheckedChangeListener是狀態改變觸發事件,比如復選框,單選框等等
OnClickListener這個監聽事件是被點擊時觸發
前者是狀態改變的時候觸發,後者是被點擊的時候觸發
④ android : 如何實現移動進入一個view的監聽事件
(1)綁定Adapter,需要判定View組件的子Item,分別注冊AdapterView.onItemclickListener不就可以了,裡面的參數回調可以區分點擊的是那一個子Item;
(2)如果不需要區分子Item,給這兩個View組件分別注冊View.onClickListener就可以了;或者讓Activity實現View.onClickListener介面,在給這兩個View組件注冊監聽,然後在onClick方法里寫個switch語句,就可以按照case R.id.xxx 這樣做想做的處理了。
⑤ 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。
⑥ android spinner是什麼
Android中的Spinner是一個用戶界面組件,允許用戶從一系列預定義的選項中選擇一個。以下是關於Android Spinner的詳細解答:
1. 主要功能與特點:
- 節省屏幕空間:Spinner類似於下拉列表,但它在未展開時不會顯示所有選項,從而節省了屏幕空間。
- 數據源綁定:Spinner可以綁定到一個數組、列表或任何實現了Cursor介面的數據源,這使得數據的管理和更新變得更加方便。
2. 布局與定義:
- 布局文件:在Android的布局文件中,Spinner通常使用<Spinner>標簽來定義。開發者可以在XML文件中指定Spinner的位置、大小和其他屬性。
3. 用戶交互:
- 展開與收起:用戶可以通過點擊Spinner旁邊的箭頭按鈕來展開或收起選項列表。這種交互方式使得Spinner在用戶界面上既簡潔又實用。
4. 事件監聽與處理:
- 事件監聽:Spinner支持事件監聽功能。當用戶選擇一個選項時,開發者可以通過設置一個OnItemSelectedListener來處理這一事件,從而執行相應的邏輯操作。
5. 應用場景:
- 表單選項:在表單中提供選項選擇,如性別、職業等。
- 列表篩選:在列表視圖中提供篩選功能,允許用戶通過選擇篩選條件來過濾列表項。
- 設置界面:在設置界面中提供配置選項,如語言選擇、主題設置等。
6. 發展趨勢:
- 逐漸被取代:隨著Android版本的更新和技術的發展,Spinner逐漸被RecyclerView和SpinnerAdapter等更靈活的組件所取代。這些新組件提供了更強大的功能和更好的性能表現。
- 廣泛應用:盡管如此,Spinner仍然在一些舊的應用程序和簡單的UI設計中被廣泛使用,特別是在需要節省屏幕空間並提供下拉選擇功能的場景中。