已经很长时间没有写博客了,这段时间不是项目忙就是忙着找工作,还忙着过年,总之很忙。年后的工作时做launcher,这对我这个新手来说,又是各种挑战,网上关于launcher的开发资料不再像以前那么全面以及泛滥,搜到最多的也是对于launcher的框架分析,那么对于launher的框架在此就不再赘述,推荐阅读以下博客http://www.oschina.net/android/317/android-launcher,http://blog.csdn.net/internetman/article/details/7201165

我今天就是总结下我这几天的劳动成果,也就是大家基于原生4.0的launcher做修改时可能会遇到的一些小功能修改及添加。

一:打开应用抽屉;

其实,这个方法系统已经封装好了,在launcher类中的showAllApps()方法可以很方便的在任何你需要的地方使用。

二:打开屏幕预览;

这个方法如上面是系统就已经封装好的,在launcher类中,showPreviews()方法。

三:通知栏的开启和关闭;

由于通知栏是framework层的布局,我们在上层无法直接进行控制,一种方法是修改framework层的代码,但是这对于上层应用来说代价有点高,所以我们另辟蹊径,我采用的方法是使得应用程序全屏显示,launcher也是作为一个单独的应用程序,所以这种方式也是可行的,整个launcher中只有一个activity,那就是launcher类,所以可以执行以下代码

getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);


这段代码大家应该很熟悉,全屏之后就会发现通知栏隐藏了,但是想要让他再显示该如何处理,笔者最初采用的是逆向思维,你前面不是设置全屏了嘛,那我就在需要显示的地方在设置一次布局,由于launcher.xml中最外层的布局的width和hight的值都是match_parent,于是笔者用了以下代码

getWindow().setFlags(WindowManager.LayoutParams.MATCH_PARENT,WindowManager.LayoutParams. MATCH_PARENT);


可是最后发现这两行代码的结果是导致程序报错退出,所以我们在此该做的不是重置布局,而是退出当前全屏模式,所以正确的代码应该是下面这个

finalWindowManager.LayoutParams attrs = getWindow()                            .getAttributes();                 attrs.flags &= (~WindowManager.LayoutParams.FLAG_FULLSCREEN);                 getWindow().setAttributes(attrs);                 getWindow().clearFlags(                            WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);


这样便能退出全屏,也就能再显示通知栏了。

四:展开通知栏;

这个原生操作就是手势下滑通知栏实现展开通知栏。可以用以下代码实现,

try {                 Object service =getSystemService("statusbar");                 if (service != null) {                      Method expand =service.getClass().getMethod("expand");                      expand.invoke(service);                 }           } catch (Exception e) {           }

由于要获得SystemService的数据,所以需要捕获下异常。

五:最近使用程序;

这是修改launcher过程中遇到的比较难解决的问题,原生的操作是长按home键便出现最近使用程序列表,但是home键是机器系统权限最高的按键,我们无法在上层实现监听,所以那个系统级的最近使用程序页面我还没有实现,暂时的解决方法是拿到最近使用程序的list,然后自己写布局显示,不过这样实在不好,界面难看不说,也没有系统那种好的用户体验,比如左右滑动可以从列表中删除并同时关闭程序。关于这一点,如果有哪位高人实现过系统级的那个最近使用程序界面,请赐教,不胜感激,此处我贴出获得最近使用程序list的方法

ActivityManager result =(ActivityManager)context.getSystemService(Context.ACTIVITY_SERVICE);ArrayList<RecentTaskInfo>apps = (ArrayList<RecentTaskInfo>) result.getRecentTasks(10,ActivityManager.RECENT_WITH_EXCLUDED);


六:一键实现workspace页面跳转

原生的操作是左右滑动,

int curPage = mWorkspace.getCurrentPage();      if (curPage != 0) {        mWorkspace.snapToPage(0);      }


在workspace类中实现了对当前页面数的判断,也封装了跳转的方式,只需要传入你想跳转的页面数即可,图上面的代码,传入0跳转进入第一个页面。

七:打开系统搜索;

直接调用系统方法,onSearchRequested()。在launcher类中

八:语音搜索

Android从2.3开始支持谷歌Android语音搜索,前提是必须安装google语音搜索应用,你可以直接用调用其他应用程序的方法调用这个功能,代码如下,

PackageManager packageManager = Launcher.this.getPackageManager();      Intentintent = newIntent();      intent= packageManager           .getLaunchIntentForPackage("com.google.android.voicesearch");      if (intent == null) {        Toast.makeText(Launcher.this, "未安装goole语音搜索软件,请安装!",              Toast.LENGTH_SHORT).show();      }else{        startActivity(intent);      }


九:屏幕下部的区域隐藏与现实,

屏幕下方的dock区域只是个普通的view,他的隐藏和显示就是简单的view的显隐,这里就不多说了。

今天先暂时写到这里,今天总结的多是一些小的系统功能,不过是冰山的一小角而已。随着日后开发的深入,我会继续进行完善,最最希望的是做过launcher的前辈能留言指教一二,我现在过程中遇到较多的问题,希望与之交流。

更多相关文章

  1. Android(安卓)Sqlite 数据的存储
  2. 《Android开发艺术探索》之学习笔记(三)View的基础知识
  3. 三种方法,刷新 Android(安卓)的 MediaStore!让你保存的图片立即出
  4. Android(安卓)launcher动态Icon的实现方法
  5. 防止Android过快点击造成多次事件的三种方法
  6. Android(安卓)开源项目收集(开源之路险且艰,有负出就有收获)
  7. Android中自定义加载样式图片的具体实现
  8. 【幻灯片分享】和Android源代码一起工作 | 海豚浏览器 胡继堂 |
  9. Android面试系列之一

随机推荐

  1. 1 Android 安全机制概述
  2. j2me to android
  3. android 使用覆盖图
  4. 转载:Android的设置界面及Preference使用
  5. 关于Zipalign的介绍和使用方法
  6. android mainfest 属性详解
  7. Android点滴累计
  8. android后台服务service全解析(上)--serv
  9. Android(安卓)学习 之 Canvas (一)
  10. Android学习心得(二)——短信服务