Android系统没有提供音量按键的广播,而Activity的onKeyDown方法只有在界面显示时才能捕获音量变化,

要在锁屏状态或后台获得音量按键事件,可以通过判断音量值的改变来判断是否按下了音量键。实现的具体思路是:

开一个子线程,持续判断当前音量值和之前音量值是否一致,如果不同说明按下了音量键,并且重置音量值,使音量不在最大值或最小值上。

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锁屏状态获取音量按键事件相关推荐

  1. 【Android 电量优化】电量优化 ( 网络状态获取 | 主动获取 WIFI 状态 | 被动获取 WIFI 状态 )

    文章目录 一.获取 WIFI 状态 二.主动获取 WIFI 状态 三.被动获取 WIFI 状态 参考 Google 官方文档 : 优化电池续航时间 一.获取 WIFI 状态 在应用中执行某些操作 , ...

  2. 【Android 电量优化】电量优化 ( 充电状态获取 | 主动获取充电状态 | 广播接受者监听充电状态 | 被动获取充电状态 | 注册空广播接受者获取历史广播 )

    文章目录 一.获取充电状态 二.被动获取充电状态 三.主动获取充电状态 参考 Google 官方文档 : 优化电池续航时间 一.获取充电状态 在应用中执行某些操作 , 如软件云端备份 , 从服务器端获 ...

  3. 【Android】代码实现模拟屏幕点击和键盘按键事件

    最近参加某比赛写了一个Android手机控制Android电视的程序,其中需要控制电视端模拟"鼠标"点击,和模拟按键盘的事件. 下面直接贴上程序: /*** 触发屏幕点击事件* @ ...

  4. php读音量大小,Android_Android中实时获取音量分贝值详解,基础知识 度量声音强度,大 - phpStudy...

    Android中实时获取音量分贝值详解 基础知识 度量声音强度,大家最熟悉的单位就是分贝(decibel,缩写为dB).这是一个无纲量的相对单位,计算公式如下: 分子是测量值的声压,分母是参考值的声压 ...

  5. Android输入法界面管理(打开/关闭/状态获取)

    天猫内部优惠券 最近做一个带发表情的聊天界面,需要管理系统输入法的状态, 一.打开输入法窗口: InputMethodManager inputMethodManager = (InputMethod ...

  6. android 模拟点击 不发出声音,【Android】代码实现模拟屏幕点击和键盘按键事件...

    最近参加某比赛写了一个Android手机控制Android电视的程序,其中需要控制电视端模拟"鼠标"点击,和模拟按键盘的事件. 下面直接贴上程序: // 模拟屏幕点击事件 publ ...

  7. android startactivity 跳到锁屏_「瀑布屏」手机到底好不好用?

    最近这几年,各大品牌都在围着手机屏幕打转,推陈出新的势头愈演愈烈.而在刘海屏.水滴屏和挖孔屏种种之后,我们又迎来了一个新名词,瀑布屏. 和当初 vivo 与 OPPO 尝试用升降结构隐藏前置摄像头的目 ...

  8. android 监听屏幕是否锁屏

    今天,简单讲讲如何监听手机屏幕是否锁屏. 实现方法:1)通过BroadcastReceiver接收广播Intent.ACTION_SCREEN_ON和Intent.ACTION_SCREEN_OFF可 ...

  9. Android app后台服务在锁屏情况下一直运行的方法

    在开发app中,不让音乐播放器,即使在锁屏的情况下 也要保持音乐不能停止播放,这就需要 在休眠时保持cpu唤醒状态,来运行service,而PowerManager.WakeLock中api可以实现这 ...

最新文章

  1. html文件显示不了box,Workbox.js registerNavigationRoute找不到/加载html文件
  2. tensorflow的mnist改写成pytorch
  3. Codeforces 432E Square Tiling(结构体+贪婪)
  4. .Net之用户控件笔记
  5. 案例 | 撇开虚荣指标,如何策划一场成功的拉新活动?
  6. 使用cert-manager实现Ingress https
  7. android String.charAt的使用
  8. 机器学习在客户管理场景中的应用
  9. word流程图两条线的端点连接_GitMind免费的思维导图+流程图制作工具
  10. 正则判断 空格_js关于正则的前后关联约束(前后预查)
  11. 高等数学上-赵立军-北京大学出版社-题解-练习2.3
  12. 团队管理(1)---故事与哲理(一)
  13. python几个版本的区别-Python的这几个版本不同
  14. raw socket java_记一次蛋疼的Raw socket发送经历。附:Raw socket编程总结
  15. matplotlib -plt.rcparams.update
  16. 4种软件架构,看看你属于哪个层次!
  17. Ubuntu分辨率修改
  18. python数组a减去数组b的简便操作
  19. Epicor 客制化 - 常用对象
  20. 复现 ASPCMS企业建站系统Cookies欺骗漏洞

热门文章

  1. [系统安全] 四十六.Powershell恶意代码检测系列 (1)Powershell基础入门及管道和变量的用法
  2. [译] APT分析报告:03.OpBlueRaven揭露APT组织Fin7/Carbanak(上)Tirion恶意软件
  3. iOS之自定义封装tabBar
  4. Django MPTT —— 概述
  5. 32. Longest Valid Parentheses 最长有效括号
  6. 征战蓝桥 —— 2018年第九届 —— C/C++B组第3题——乘积尾零
  7. Broken Keyboard (a.k.a. Beiju Text)
  8. linux的svn同步文件在哪里,linux svn服务器同步文件在哪里
  9. 三角网导线平差实例_导线测量平差实例
  10. 使用debug工具修改寄存器中的值