Android鎖屏狀態獲取音量按鍵事件
要在鎖屏狀態或後臺獲得音量按鍵事件,可以通過判斷音量值的改變來判斷是否按下了音量鍵。實現的具體思路是:
開一個子執行緒,持續判斷當前音量值和之前音量值是否一致,如果不同說明按下了音量鍵,並且重置音量值,使音量不在最大值或最小值上。
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系統沒有提供音量按鍵的廣播,而Activity的onKeyDown方法只有在介面顯示時才能捕獲音量變化, 要在鎖屏狀態或後臺獲得音量按鍵事件,可以通過判斷音量值的改變來判斷是否按下了音量鍵。實現的具體思路是: 開一個子執行緒,持續判斷當前音量值和之前音量值是
android 鎖屏狀態下顯示activity
在activity onCreate下新增 int flags = WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED; getWindow().addFlags(flags); WindowManager.LayoutPar
android鎖屏狀態下, 新訊息喚醒螢幕,並跳轉到指定頁面
最近在做一個專案,有個功能,就和QQ電話差不多,我這邊手機鎖屏狀態,當QQ電話過來時,立刻喚醒螢幕,並顯示QQ來電介面,我的是當裝置端有事件發生時通知app端彈出介面,實時顯示裝置端資訊。 最核心的程
Android鎖屏狀態下點亮螢幕並彈窗提醒
類似於手機鎖屏狀態下QQ來訊息然後點亮螢幕並彈窗,如圖。 相信QQ的這個功能大家都是很熟悉的了,下面就開始講具體的實現步驟。 一、新建一個Activity並在OnCreate中新增四個標識 @Override protected
android O如何獲取當前鎖屏狀態
以下程式碼在Android O驗證可行。 主要作用:獲取當前是否處於鎖屏狀態。 主要是呼叫KeyguardManager裡面的介面,同樣可以使用其他介面判斷當前是否是安全鎖屏等。 import android.app.KeyguardManager; KeyguardMan
Android鎖屏或滅屏狀態下,快速按兩次音量下鍵實現抓拍功能(1.1Framework層使用廣播形式實現)
實現思路: WindowManagerService迴圈讀取下面按鍵訊息並分發給視窗,在訊息分發前會在PhoneWindowManager.interceptKeyBeforeQueueing方法中進行訊息的過濾。因此該實現方式為在訊息分發前的interceptKe
Android鎖屏或滅屏狀態下,快速按兩次音量下鍵實現抓拍功能(一,Framework層實現)
WindowManagerService迴圈讀取下面按鍵訊息並分發給視窗,在訊息分發前會在PhoneWindowManager.interceptKeyBeforeQueueing方法中進行訊息的過濾。因此該實現方式為在訊息分發前的interceptKeyBeforeQueueing方法中監聽當前按
Windows利用WTS API獲取鎖屏狀態
下面的這個函式可以獲取Windows是否處於鎖屏狀態: 程式碼來自stackoverflow,C++: check if computer is locked。 #include <Windows.h> #include <WtsApi32.h> boo
android 滑動鎖屏狀態下如何禁止下拉狀態列
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!  
android------鎖屏(手機啟動出現鎖屏界面)
自定義 urn 一起 alt 點擊下載 tac ces roi class 以前用過一個紅包鎖屏的軟件,第一次打開手機出現鎖屏,滑動領取收益,當時覺得這功能不錯,就查閱資料,寫了一個案例, apk運行流程: 進入軟件---》啟動服務---》關閉手機(可先退出應用)--》
Android鎖屏勒索病毒分析(4)秒搶紅包
1.樣本概況 1.1 基本資訊 樣本名稱: 秒搶紅包 所屬家族: 鎖屏勒索病毒 MD5值: 033ae1ba78676130e99acc8d9f853124 包名: com.h 入口: MainActivity 最低執行環境: Android2.2
Android鎖屏勒索病毒分析(3)刷贊
1.樣本概況 1.1 基本資訊 樣本名稱: 刷贊. 所屬家族: 鎖屏勒索病毒(a.rogue.SimpleLocker.a) MD5值: 7626090b69cd1e2e5671a022712808eb 包名: com.binge.mohe 入口: Mai
Android鎖屏勒索病毒分析(2)免流伺服器
1.樣本概況 1.1 基本資訊 樣本名稱: 免流伺服器. 所屬家族: 鎖屏勒索病毒(a.rogue.SimpleLocker.a) MD5值: 2efca46f34a565c2ef4052b89b6b364b 包名: zs.ip.proxy 入口: Mai
Android鎖屏勒索病毒分析(1)BWM線上
1.樣本概況 1.1 基本資訊 樣本名稱: 刷贊. 所屬家族: 鎖屏勒索病毒(a.rogue.SimpleLocker.a) MD5值: 7626090b69cd1e2e5671a022712808eb 包名: com.binge.mohe 入口: MainActiv
仿QQ鎖屏狀態下訊息提醒
最近專案開發中需要手機螢幕喚醒功能,查閱資料後整理了demo,當鎖屏狀態下收到通知,喚醒螢幕。主要思路為通過MyService服務傳送一條廣播,然後判斷如果為鎖屏狀態就啟動鎖屏訊息的activity.此時有震動和鈴聲提示,顯示倒計時。 下面請看效果圖: 實現步驟: 1:在
【架構分析】Android鎖屏與Activity生命週期的變化
概述 Android開機啟動後預設會先進入鎖屏然後滅屏休眠, 本文旨在介紹這個過程中最先啟動的Home Launch Activity (其實在Android N上最早被啟動的是Settings中的FallbackHome Activity) 如何發生相關的生命週期變化, 以及AMS
Android鎖屏出現java.lang.RuntimeException: Camera is being used after Camera.release() was called
java.lang.RuntimeException: Camera is being used after Camera.release() was called 在相機開發中,開啟相機顯示預覽,然後按關機鍵鎖屏,出現上述錯誤,程式崩潰。
去除android鎖屏
將frameworks/base/policy/src/com/android/internal/policy/impl/KeyguardViewMediator.java 程式碼中的 mExternallyEnabled 由ture變為false即可 private b
android 鎖屏重新開啟後fragment無法切換解決方案
做的是平板程式,用的橫版,開啟後就是4個fragment,後來發現鎖屏重新開啟後fragment無法切換了 後來去網上找了下用了別人的方法解決了,內容如下: 今天在寫一個應用的時候,因為需要設定成橫屏模式,所以在Manifest裡面的Activity裡面加了兩個引數設
Android 藍芽狀態獲取
1. 藍芽狀態是否連線: public static boolean isBTConnected(){ BluetoothAdapter blueadapter = BluetoothAdapter.getDefaultAdapter(); //adapter也有getState