android 锁屏音量,Android锁屏状态获取音量按键事件
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锁屏状态获取音量按键事件相关推荐
- 【Android 电量优化】电量优化 ( 网络状态获取 | 主动获取 WIFI 状态 | 被动获取 WIFI 状态 )
文章目录 一.获取 WIFI 状态 二.主动获取 WIFI 状态 三.被动获取 WIFI 状态 参考 Google 官方文档 : 优化电池续航时间 一.获取 WIFI 状态 在应用中执行某些操作 , ...
- 【Android 电量优化】电量优化 ( 充电状态获取 | 主动获取充电状态 | 广播接受者监听充电状态 | 被动获取充电状态 | 注册空广播接受者获取历史广播 )
文章目录 一.获取充电状态 二.被动获取充电状态 三.主动获取充电状态 参考 Google 官方文档 : 优化电池续航时间 一.获取充电状态 在应用中执行某些操作 , 如软件云端备份 , 从服务器端获 ...
- 【Android】代码实现模拟屏幕点击和键盘按键事件
最近参加某比赛写了一个Android手机控制Android电视的程序,其中需要控制电视端模拟"鼠标"点击,和模拟按键盘的事件. 下面直接贴上程序: /*** 触发屏幕点击事件* @ ...
- php读音量大小,Android_Android中实时获取音量分贝值详解,基础知识
度量声音强度,大 - phpStudy...
Android中实时获取音量分贝值详解 基础知识 度量声音强度,大家最熟悉的单位就是分贝(decibel,缩写为dB).这是一个无纲量的相对单位,计算公式如下: 分子是测量值的声压,分母是参考值的声压 ...
- Android输入法界面管理(打开/关闭/状态获取)
天猫内部优惠券 最近做一个带发表情的聊天界面,需要管理系统输入法的状态, 一.打开输入法窗口: InputMethodManager inputMethodManager = (InputMethod ...
- android 模拟点击 不发出声音,【Android】代码实现模拟屏幕点击和键盘按键事件...
最近参加某比赛写了一个Android手机控制Android电视的程序,其中需要控制电视端模拟"鼠标"点击,和模拟按键盘的事件. 下面直接贴上程序: // 模拟屏幕点击事件 publ ...
- android startactivity 跳到锁屏_「瀑布屏」手机到底好不好用?
最近这几年,各大品牌都在围着手机屏幕打转,推陈出新的势头愈演愈烈.而在刘海屏.水滴屏和挖孔屏种种之后,我们又迎来了一个新名词,瀑布屏. 和当初 vivo 与 OPPO 尝试用升降结构隐藏前置摄像头的目 ...
- android 监听屏幕是否锁屏
今天,简单讲讲如何监听手机屏幕是否锁屏. 实现方法:1)通过BroadcastReceiver接收广播Intent.ACTION_SCREEN_ON和Intent.ACTION_SCREEN_OFF可 ...
- Android app后台服务在锁屏情况下一直运行的方法
在开发app中,不让音乐播放器,即使在锁屏的情况下 也要保持音乐不能停止播放,这就需要 在休眠时保持cpu唤醒状态,来运行service,而PowerManager.WakeLock中api可以实现这 ...
最新文章
- html文件显示不了box,Workbox.js registerNavigationRoute找不到/加载html文件
- tensorflow的mnist改写成pytorch
- Codeforces 432E Square Tiling(结构体+贪婪)
- .Net之用户控件笔记
- 案例 | 撇开虚荣指标,如何策划一场成功的拉新活动?
- 使用cert-manager实现Ingress https
- android String.charAt的使用
- 机器学习在客户管理场景中的应用
- word流程图两条线的端点连接_GitMind免费的思维导图+流程图制作工具
- 正则判断 空格_js关于正则的前后关联约束(前后预查)
- 高等数学上-赵立军-北京大学出版社-题解-练习2.3
- 团队管理(1)---故事与哲理(一)
- python几个版本的区别-Python的这几个版本不同
- raw socket java_记一次蛋疼的Raw socket发送经历。附:Raw socket编程总结
- matplotlib -plt.rcparams.update
- 4种软件架构,看看你属于哪个层次!
- Ubuntu分辨率修改
- python数组a减去数组b的简便操作
- Epicor 客制化 - 常用对象
- 复现 ASPCMS企业建站系统Cookies欺骗漏洞
热门文章
- [系统安全] 四十六.Powershell恶意代码检测系列 (1)Powershell基础入门及管道和变量的用法
- [译] APT分析报告:03.OpBlueRaven揭露APT组织Fin7/Carbanak(上)Tirion恶意软件
- iOS之自定义封装tabBar
- Django MPTT —— 概述
- 32. Longest Valid Parentheses 最长有效括号
- 征战蓝桥 —— 2018年第九届 —— C/C++B组第3题——乘积尾零
- Broken Keyboard (a.k.a. Beiju Text)
- linux的svn同步文件在哪里,linux svn服务器同步文件在哪里
- 三角网导线平差实例_导线测量平差实例
- 使用debug工具修改寄存器中的值