您的位置:首页 > 移动开发 > Android开发

安卓系统级返回键和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),如果各位在开发时遇到什么可以问我,大家一起分享交流!

                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息