实现P931项目蓝牙键盘静音键功能以及打印F1,F2键信息打印
准备工作:
1.下载android4.0.3系统
git clone gitolite@scm:vc0882/sdk_4.0
(使用git pull可以更新本地文件)
2.修改代码
修改思路:Android已经定义了比较丰富、完整的标准按键。在一般情况下,不需要为Android系统增加按键,只需要根据kl配置按键即可。在系统中有比较奇特按键的时候,需要更改Android系统的框架层来更改按键。
底层驱动已经实现相应按键驱动。
1>.kernel/include/linux/input.h
察看F1,F2,MUTE按键映射到Linux的值

#define KEY_MUTE113

#define KEY_F1 59
#define KEY_F2 60

#define KEY_BRIGHTNESSDOWN 224
#define KEY_BRIGHTNESSUP 225

2>.frameworks/base/data/keyboards/qwerty.kl
将1中查到的的值添加到配置文件qwerty.kl中,以便映射到上层应用
add by huanggenda
key 60 F2
key 61 F3
key 113 MUTE
key 0x1d0 FN
key 224 BRIGHTNESSDOWN 
key 225 BRIGHTNESSUP 
#the end by huanggenda

3>.framework/core/res/res/values/attrs.xml

此文件为linux映射到应用的值,以供应用程序调用

<enum name="KEYCODE_F1" value="131" />
<enum name="KEYCODE_F2" value="132" />

<enum name="KEYCODE_VOLUME_MUTE" value="164" />

<!--add by huanggenda-->
<enum name="KEY_BRIGHTNESSDOWN" value="211" />
<enum name="KEY_BRIGHTNESSUP" value="212" />
<!--the end add by huanggenda-->

4>.在framework/base/policy/src/com/android/impl/PhoneWindowManager.java

按键code察看调试:

//modify false to true for debug
if (true) {
Log.d(TAG, "interceptKeyTi keyCode=" + keyCode + " down=" + down + " repeatCount="
+ repeatCount + " keyguardOn=" + keyguardOn + " mHomePressed=" + mHomePressed);
}

//The function of F2 and F1 add by huanggenda
if(keyCode == KeyEvent.KEYCODE_F2)
Log.d(TAG, "interceptKeyTi keyCode=" + keyCode + " F2");
if(keyCode == KeyEvent.KEYCODE_F3)
Log.d(TAG, "interceptKeyTi keyCode=" + keyCode +" F3");
if(keyCode == KeyEvent.KEYCODE_BRIGHTNESSDOWN)
Log.d(TAG, "interceptKeyTi keyCode=" + keyCode + " BRIGHTNESSDOWN");
if(keyCode == KeyEvent.KEYCODE_BRIGHTNESSUP)
Log.d(TAG, "interceptKeyTi keyCode=" + keyCode +" BRIGHTNESSUP");
//The end by huanggenda

5>.framework/base/media/java/android/media/AudioManager.java

处理音量键方法:

/**
* @hide
*/
public void handleKeyDown(int keyCode, int stream) {
boolean mute = isStreamMute(AudioManager.STREAM_MUSIC);
switch (keyCode) {
case KeyEvent.KEYCODE_VOLUME_UP:
case KeyEvent.KEYCODE_VOLUME_DOWN:

/* *
* if audio is mute, turn off mute.
* Add by huanggenda 
* */
if (mute) {
setStreamMute(AudioManager.STREAM_MUSIC, false);
int volume = getStreamVolume(AudioManager.STREAM_MUSIC);
if (volume == 0) {
if (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN) {
setStreamMute(AudioManager.STREAM_MUSIC, true);
break;
} else if (keyCode == KeyEvent.KEYCODE_VOLUME_UP) {
setStreamMute(AudioManager.STREAM_SYSTEM, false);
setStreamMute(AudioManager.STREAM_NOTIFICATION, false);
}
} else {
setStreamMute(AudioManager.STREAM_SYSTEM, false);
setStreamMute(AudioManager.STREAM_NOTIFICATION, false);
adjustStreamVolume(AudioManager.STREAM_MUSIC, 
AudioManager.ADJUST_SAME, 
AudioManager.FLAG_SHOW_UI);
break;
}
}
/* The end to add by huanggenda */
/*
* Adjust the volume in on key down since it is more
* responsive to the user.
*/
int flags = FLAG_SHOW_UI | FLAG_VIBRATE;
if (mVolumeControlStream != -1) {
stream = mVolumeControlStream;
flags |= FLAG_FORCE_STREAM;
}
adjustSuggestedStreamVolume(
keyCode == KeyEvent.KEYCODE_VOLUME_UP
? ADJUST_RAISE
: ADJUST_LOWER,
stream,
flags);

/* *
* If the volume is 0, turn on mute.
* Add by huanggenda 
* */
if (stream == AudioManager.STREAM_MUSIC) {
int v = getStreamVolume(AudioManager.STREAM_MUSIC);
mute = isStreamMute(AudioManager.STREAM_MUSIC);
if (!mute && (v == 0)) {
setStreamMute(AudioManager.STREAM_SYSTEM, true);
setStreamMute(AudioManager.STREAM_MUSIC, true);
setStreamMute(AudioManager.STREAM_NOTIFICATION, true);
adjustStreamVolume(stream,
AudioManager.ADJUST_SAME, 
AudioManager.FLAG_SHOW_UI);
}
}
/* The end to add by huanggenda */
break;
case KeyEvent.KEYCODE_VOLUME_MUTE:
// TODO: Actually handle MUTE.
mute = !mute;
setStreamMute(AudioManager.STREAM_SYSTEM, mute);
setStreamMute(AudioManager.STREAM_MUSIC, mute);
setStreamMute(AudioManager.STREAM_NOTIFICATION, mute);
adjustStreamVolume(AudioManager.STREAM_MUSIC, 
AudioManager.ADJUST_SAME, 
AudioManager.FLAG_SHOW_UI);
break;
}
}

3.编译系统
. build/envsetup.sh
lunch 3 (android4.0.1是10,android4.0.3是4)
make clean
make
4.系统烧录工具,    nand_tool_new,packet_tool_4.0,这两个工具是由中星微原厂提供,使用方法:
步骤一:运行packet_tool_4.0中Vortexpacket.exe,加载ubi.cache8k_256_2048.img,ubi.data8k_256_2048.img,ubi.system8k_256_2048.img,ubi.userdata8k_256_2048.img四个文件,这四个文件在out/target/product/vortex/8k_256_2048/ 目录下,然后点击转换按钮进行转换生成vortex.pak文件
步骤二:运行 nand_tool_new中MPTool.exe,设置vortex.pak路径,再扫描设备,在下载系统就可以了。

android按键静音键功能实现相关推荐

  1. android升级功能键,Android 按键添加转载

    按键从Linux到Android 现在的普通按键也集成到Linux Input子系统中了,只需要把按键对应的IO端口配置好,按键就可以工作了.所以一般提供的BSP(或者叫作解决方案)中,已经完善了按键 ...

  2. Android按键响应的几种方式、安卓页面的跳转、页面跳转传参、页面自动跳转、Activity(页面)的生命周期

    按键响应的第一种方式: 在XML文件里面设置按键的onClick绑定函数.就像下面的代码,给Button设置onClick属性,在按键被按下的时候,会调用java文件里面的onClickbtton1这 ...

  3. Android开发常用功能 https://www.2cto.com/kf/201611/561847.html

    Android开发常用功能 2016-11-03 09:43:58          来源:EvanJames的专栏 收藏   我要投稿 1.定时器的实现 (1)采用Handler的postDelay ...

  4. android按键精灵执行流程,android按键精灵学习_框架搭建

    android按键精灵脚本的思路 1.主线循环 2.支线循环 3.功能模块 4.代码命令 5.固定模块 6.检测状态模块, 通常是启动一个线程,监控多少分钟后状态还没改变,就跳出支线循环并记录时间和结 ...

  5. Android按键字符映射文件

    按键字符映射文件(.kcm 文件)负责将 Android 按键代码与修饰符的组合映射到Unicode字符. 如果只是告诉系统该设备仅用于特殊用途(非全键盘),那么对于具有按键的所有内部(内置)输入设备 ...

  6. Android按键唤醒原理

    系统默认的唤醒按键值 http://androidxref.com/9.0.0_r3/xref/frameworks/base/services/core/java/com/android/serve ...

  7. Android 实现闹钟功能

      原文地址:Android 实现闹钟功能作者:Android_Learners 一.手机闹钟主要用到了AlarmManager类,AlarmManager类提供了访问系统定时服务的途径,开发人员可以 ...

  8. android 添加附件功能,Android实现带附件的邮件发送功能

    本文实例讲解了基于基于jmail实现android邮件发送功能,分享给大家供大家参考,具体内容如下 在android上发送邮件方式: 第一种:借助gmail app客户端,缺点是必须使用gmail帐号 ...

  9. android倒计时功能,android实现倒计时功能(开始、暂停、0秒结束)

    本文实例为大家分享了android实现倒计时功能的具体代码,供大家参考,具体内容如下 [思路]:通过 timer 执行周期延时的任务,handler 中将计时信息更新,并在计时结束时结束 timer ...

最新文章

  1. ​​清华大学举办疫情防控期间首场在线学位论文答辩
  2. 一文读懂AI简史:当年各国烧钱许下的愿,有些至今仍未实现
  3. 在哪里可以免费学python-在合肥哪里可以学Python
  4. react中遇到的问题
  5. 【ruoyi若依】layer 重置大小/resize
  6. vc6.0能编辑html,科学网—VC6.0的18个实用小技巧 - 梁才的博文
  7. 实战:如何对磁盘和网络IO进行评估、监控、定位和优化?
  8. OC类导入Swift工程演示
  9. New ipad与ipad2有何不同
  10. Technical Art Director
  11. Atitit 计算软件简史 艾提拉著 目录 1.1. 第二代软件(1959~1965) 高级语言 第三代软件(1965~1971) os 1 1.2. 第四代软件(1971~1989)结构化的程序
  12. java之pdf打印
  13. 2018年马哥Linux
  14. seata分布式事务处理教程
  15. JDBC Driver介绍
  16. 阿里 达摩院 cv 算法 面经
  17. tipask 3.5 出错get_class() expects parameter 1 to be object 解决方案及说明
  18. ImportError: No module named 'win32api'
  19. 互联网金融数据分析体系
  20. 学习OpCode前言

热门文章

  1. BootDo架构-基于 Springboot 和 Mybatis 的后台管理系统
  2. 如何搭建一个自己图床网站
  3. java设计模式 建造模式_java设计模式(三)建造者模式
  4. 移动文件需要计算机管理员权限,win7系统提示“需要管理员权限才能移动文件夹”的解决方法...
  5. 基于Webmagic的爬取B站用户数据的爬虫
  6. 2所非211院校挺进全球高校600强,甩开一众985 | 泰晤士世界大学排行榜出炉
  7. 次世代教程——美队盾牌雕刻
  8. 学习分布式系统需要的知识
  9. 7-56 福到了 (15 分)
  10. 如何在iPhone和iPad上使用Group FaceTime