Launcher功能的修改及添加,本篇是一些小功能的展示,通知栏显隐,dock显隐,屏幕页面跳转,(语音)搜索,等小功能

已经很长时间没有写博客了,这段时间不是项目忙就是忙着找工作,还忙着过年,总之很忙。年后的工作时做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的前辈能留言指教一二,我现在过程中遇到较多的问题,希望与之交流。

 

 

 

 

你可能感兴趣的:(android,Launcher)