安卓系统级返回键和HOME键
2016-08-08 14:34
267 查看
最近的一个项目需要写一个Launcher,所以需要用到自定义的back键和home键,之前在网上查找了很多资料,但是很多都很老了,在新的安卓版本上不能使用,所以这次特别把自己的处理方法发出来,我在最新的华为和小米,魅族上测试时可以使用的,一来方便以后使用的时候查找,另外也方便大家。老规矩,还是上代码先: Home键: Intent intent =new Intent(Intent.ACTION_MAIN); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.addCategory(Intent.CATEGORY_HOME); startActivity(intent);
这里一定要加Intent.FLAG_ACTIVITY_NEW_TASK,如果没有加的话在4.4版本会没有效果,在5.1版本
会报错,在6.0版本也没有效果,当时我也是测试了很多版本才解决这个问题的。
Back键:
Back键要相对麻烦一些,我这里有两种方法来调用系统级别的back键功能,一种是调用系统辅助功能的
方式,另外一种是直接通过反射的原理来调用android的底层接口。这两种方法都各有优劣。
第一种方法不好的地方是在调用前需要手动设置一次权限,有点像微信红包功能一样,需要调用
AccessibilityService的服务,大家还是先看看我的代码吧:
1.先写了一个服务类:
2.在要使用back键的控件上使用如下方法:
back_selector.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) {//back键 BackKeyService.backKeyService.performGlobalAction(AccessibilityService.GLOBAL_ACTION_BACK);}}就这一句话是不是很简单,但是实际在用的时候会有些不方便,大家有时间体验一下就知道了,所以我就采用
第二种方法。
第二种方法:使用反射的机制来调用Android底层,如果对反射不太了解的同学可以自己度娘一下,当时我也是
重新去复习了一下,因为自己也很久没有用了。。。。
back_selector.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {//back键Runtime runtime = Runtime.getRuntime();try {runtime.exec("input keyevent " + KeyEvent.KEYCODE_BACK);} catch (IOException e) { // TODO Auto-generated catch blocke.printStackTrace();}}}
这种方法可以在4.2以下的机型直接使用,但是在这版本以上的就不可以了,要解决这个问题,必须
使用signApk工具,对platform.pk8和platform.x509.pem重新签名,签名的方法很简单:
1.把项目的apk放在signApk的包内。
2.然后运行cmd,并定位到singApk这个包的位置,我的文件位置如下图:
3.在后面输入java -jar SignApk.jar platform.x509.pem platform.pk8 launcher-debug.apk sign_app.apk
4.如果成功就会在包内生成一个名叫sign_app.apk,然后将它安装在你的安卓设备,你的back键
就可以正常使用了哦
5.下面的附件就是所需要的signApk包以上方法我已经在安卓常用的机型和软件版本测试过是可以正常使用的(机型覆盖主流机型的85%,版本
从4.2到6.0),如果各位在开发时遇到什么可以问我,大家一起分享交流!
相关文章推荐
- -Dmaven.multiModuleProjectDirectory system property is not set. Check $M2_HOME environment variable
- android:background="@drawable/home_tab_bg"
- 07_Warning $HADOOP_HOME is deprecated.去除办法
- Android 中处理POWER/HOME流程
- mac OS X 上设置动态JAVA_HOME
- TesterHome
- android从零单排之home键的屏蔽与复写
- Eclipse导入项目后,XDoclet错误:Missing library: xdoclet-1.2.1.jar. S...he home directory for XDoclet. 1.2.1
- when compile /home/wangxiao/NVIDIA-CUDA-7.5 SAMPLES, it warning: gcc version larger than 4.9 not supported, so: old verson of gcc and g++ are needed
- Mac OS 上设置 JAVA_HOME
- Cannot run program "/home/user/Android/Sdk/build-tools/23.0.2/aapt": error=2 No such file or directo
- Java为什么要设置环境变量、JAVA_HOME
- HDU 3932 Groundhog Build Home (模拟退火算法)
- Tomcat启动分析(我们为什么要配置CATALINA_HOME环境变量)
- 按下Home键后重新返回程序,显示最后的Activity
- 解决:本地计算机 上的 OracleOraDb10g_home1TNSListener服务启动后停止
- <Maven> M2_HOME 和 MAVEN_HOME 有什么区别?
- react-native android_home配置问题(android)
- android 锁屏界面禁用长按home 和menu(recent apps)
- Tomcat启动过程中找不到JAVA_HOME解决方法