`
Lucky_Man
  • 浏览: 27773 次
  • 性别: Icon_minigender_1
  • 来自: 安徽
社区版块
存档分类
最新评论

修改Launcher源码之快速启动

阅读更多

  最近在写一个快速拨号的App,应用很简单,主要要突出一个快速的特点,启动要快,最好能从Home Screen启动,当然第一个反应是在桌面上新建一个快捷方式,不过我决定用另一种特别的方式,即:当用户在Home Screen中上下触屏时,启动此应用,左右触屏是切换桌面的。废话不多说,看怎样实现:

  1、编译运行Launcher源码,具体可参照网上相关介绍,本来打算附上修改后的源码,不过文件太大,需要的话可以找我,建议参考网络资料自己动手编译。

  2、修改Launcher源码,只要改一处,修改Workspace类的onInterceptTouchEvent方法

 

public boolean onInterceptTouchEvent(MotionEvent ev) {

        /*****************省略相关代码***********/

        final float x = ev.getX();
        final float y = ev.getY();
        Log.d("Workspace", "enter onInterceptTouchEvent");
        switch (action) {
            case MotionEvent.ACTION_MOVE:
                /*
                 * mIsBeingDragged == false, otherwise the shortcut would have caught it.
                 * Check
                 * whether the user has moved far enough from his original down touch.
                 */

                /*
                 * Locally do absolute value. mLastMotionX is set to the y value
                 * of the down event.
                 */
                final int xDiff = (int) Math.abs(x - mLastMotionX);
                final int yDiff = (int) Math.abs(y - mLastMotionY);

                final int touchSlop = mTouchSlop;
                boolean xMoved = xDiff > touchSlop;
                boolean yMoved = yDiff > touchSlop;
                
                if (xMoved || yMoved) {
                    
                    if (xMoved) {
                        // Scroll if the user moved far enough along the X axis
                        mTouchState = TOUCH_STATE_SCROLLING;
                        enableChildrenCache();
                    }
   /*********************************添加的代码****************************************/
                    if(yMoved) {            //纵向移动
                    	Log.d("workspace", "在这启动你的应用程序!");
                        
                    	Intent intent = new Intent();                    
                        //设置应用的包名,类名
                    	intent.setClassName("com.tek.qd", "com.tek.qd.QuickDialer");
                        //启动应用
                    	mContext.startActivity(intent);

                    	mTouchState = TOUCH_STATE_SCROLLING;
                    	enableChildrenCache();
                    }
  /*********************************代码结束****************************************/
                    // Either way, cancel any pending longpress
                    if (mAllowLongPress) {
                        mAllowLongPress = false;
                        // Try canceling the long press. It could also have been scheduled
                        // by a distant descendant, so use the mAllowLongPress flag to 
                        //block
                        // everything
                        final View currentScreen = getChildAt(mCurrentScreen);
                        currentScreen.cancelLongPress();
                    }
                }
                break;

            case MotionEvent.ACTION_DOWN:
                // Remember location of down touch
                mLastMotionX = x;
                mLastMotionY = y;
                mAllowLongPress = true;
                
                /*
                 * If being flinged and user touches the screen, initiate drag;
                 * otherwise don't.  mScroller.isFinished should be false when
                 * being flinged.
                 */
                
                mTouchState = mScroller.isFinished() ? 
                               TOUCH_STATE_REST : TOUCH_STATE_SCROLLING;
                break;

            case MotionEvent.ACTION_CANCEL:
            case MotionEvent.ACTION_UP:

                if (mTouchState != TOUCH_STATE_SCROLLING) {
                    final CellLayout currentScreen = (CellLayout) getChildAt(
                                                      mCurrentScreen);
                    if (!currentScreen.lastDownOnOccupiedCell()) {
                        getLocationOnScreen(mTempCell);
                        // Send a tap to the wallpaper if the last down was on 
                        //empty space
                        mWallpaperManager.sendWallpaperCommand(getWindowToken(), 
                                "android.wallpaper.tap",
                                mTempCell[0] + (int) ev.getX(),
                                mTempCell[1] + (int) ev.getY(), 0, null);
                    }
                }
                
                // Release the drag
                clearChildrenCache();
                mTouchState = TOUCH_STATE_REST;
                mAllowLongPress = false;
                break;
        }

        /*
         * The only time we want to intercept motion events is if we are in the
         * drag mode.
         */
        return mTouchState != TOUCH_STATE_REST;
    }

 

Workspace相当于你看到的一个桌面,触屏事件在到达onTouchEvent之前会先执行onInterceptTouchEvent方法。

如果你想通过在桌面空白处用触屏事件来启动你的应用的话,可以用此方法,不过用户不一定接受你的定制Launcher。

0
1
分享到:
评论
2 楼 Lucky_Man 2011-04-13  
谢谢楼上的评论,我改的是Android 2.1,联系人信息数据量一般不会太大吧,上面的文章只是介绍如何快速启动一个程序
1 楼 yelinsen05 2011-04-13  
开发环境是哪个版本的!如果做平台的话!可以改Default APP!以及Framework其实实现方式其实有很多!这个快速启动!我想强调的重点在于快速拨号在读取联系人信息大数据量的时候做优化!

相关推荐

    安卓Android源码——Android Launcher 源码修改可编译.zip

    "安卓Android源码——Android Launcher 源码修改可编译.zip" 这个标题表明我们关注的是Android操作系统的源代码,特别是与启动器(Launcher)相关的部分。Launcher是用户与Android系统交互的主要界面,它管理应用...

    安卓Android源码——Launcher源码修改可编译.zip

    对于初学者和有经验的开发者来说,分析和修改Launcher源码都是一个极具挑战性的任务,因为Launcher作为系统的核心组件,它负责桌面界面的展示和应用启动。在这个"安卓Android源码——Launcher源码修改可编译.zip...

    Android Launcher 源码修改可编译.zip源码资源下载

    为了修改和编译Android Launcher源码,你需要一个完整的Android开发环境,包括安装了Android SDK、Android Studio和必要的工具链。以下是一般步骤: 1. **导入项目**:在Android Studio中打开源码目录,通过"File" ...

    Android高级应用源码-Android Launcher 源码修改可编译.zip

    本资料包提供的是一个经过修改,可编译的Android Launcher源码,旨在帮助开发者深入理解Android启动器的工作原理,并进行定制化开发。以下是对这个高级应用源码的详细分析。 一、Android Launcher概述 Android ...

    Android项目源码-安卓Launcher原生桌面源码

    9. **自定义行为**:原生Launcher源码中还可能包含对特定设备或定制系统的特有功能,比如手势识别、快速设置面板等。 通过分析这个源码,开发者不仅可以了解到Android Launcher的基本工作流程,还能学习到如何根据...

    Android Launcher3源码已修改 可直接使用

    《深入解析Android Launcher3源码修改与应用》 在Android操作系统中,Launcher3是一个至关重要的组件,它是我们日常接触最多的部分——手机桌面。这个组件负责显示应用图标、小部件、快捷方式,以及处理主屏幕的...

    Android Launcher3源码

    通过分析`Launcher3`的源码,我们可以深入理解Android系统桌面的工作原理,了解如何定制自己的启动器。 1. **项目结构** `Launcher3`源码结构分为几个主要部分:UI组件、数据模型、后台服务、偏好设置和资源文件。...

    可以成功编译的Launcher源码

    通过编译和修改Launcher源码,开发者可以创建个性化的启动器,如改变布局、增加新功能或优化性能。此外,这也是一种深入理解Android系统工作原理的有效途径。对于想要从事Android系统定制或开发自定义启动器的开发者...

    launcher源码

    "launcher源码"是Android操作系统中的一个核心组件,主要负责应用程序的启动和管理。当我们打开手机,看到的第一个界面就是launcher,它提供了桌面、应用抽屉等界面,让我们能够方便地启动和切换应用。这里提到的adw...

    Launcher源码(Android 6.0系统原生)

    【Launcher源码(Android 6.0系统原生)】是一个深入理解Android系统启动器工作原理的宝贵资源,尤其对于想要定制或优化Android界面的开发者来说。这个源码是基于Android 6.0 Marshmallow的官方Launcher应用,已经...

    Android Launcher 源码

    以下是对Android Launcher源码的一些关键知识点的详细解释: 1. **ActivityLauncher**: 这是Launcher的主要类,它继承自`AppCompatActivity`,负责处理用户的点击事件,启动或恢复应用。源码中可以看到如何解析布局...

    Launcher 2源码修改学习总结

    通过深入学习和修改Launcher 2的源码,开发者可以更全面地理解Android系统的运行机制,提升定制化应用开发的能力。同时,这也是一种挑战,因为源码复杂且深度集成于系统中,需要耐心和扎实的编程基础。

    Android 5.0 Launcher3源码

    6. **自定义启动器扩展**:通过分析源码,开发者可以了解如何根据需求修改启动器的行为,例如添加新的功能、更改界面布局或者优化性能。 7. **资源管理**:Android资源管理在Launcher3源码中扮演重要角色,包括颜色...

    Android_launcher源码全面分析

    Android Launcher源码全面分析涉及了Android桌面启动器(Launcher)的核心功能实现,包括界面配置、图标及壁纸调整、启动和初始化流程、以及一些高级特性如HotSeat和页面滑动处理等。接下来将根据给出的信息点,详细...

    Android 4.4.2 Launcher3 源码 eclipse 可直接编译

    源码的提供使得开发者能够深入理解其工作原理,进行自定义修改或开发自己的启动器。 源码编译对于开发者来说是一个宝贵的学习资源,它允许开发者探索Android系统的底层运作,了解如何与硬件交互,以及如何优化用户...

    launcher3源码

    "launcher3源码"是Android操作系统中主启动器(Home屏幕)的核心组件,主要负责管理桌面图标、小部件以及应用抽屉的显示和交互。在Android 4.3及以上版本中,launcher3作为系统默认的启动器,为用户提供了一个用户...

    Android launcher源码

    通过对Android Launcher源码的深入分析,开发者可以了解到Android系统的底层运作机制,这不仅有助于改进现有的启动器,也有利于开发出更具创新性的个性化启动器。同时,这也是一种提升Android系统理解和编程能力的...

    安卓Launcher桌面相关-AndroidLauncher源码修改可编译.rar

    Android Launcher源码的修改与编译是一个深入理解Android系统运行机制的重要途径,对于开发者来说,这能帮助他们定制自己的桌面应用或者优化系统性能。 1. **Launcher结构分析** Android Launcher由多个组件构成,...

    android桌面launcher源码 版本2.3

    版本2.3的Launcher源码提供了深入了解Android系统启动器工作原理的机会,这对于开发者尤其是Android定制和系统优化人员来说非常宝贵。源码的修改表明它可能已经过优化或功能增强,能够成功运行。 首先,我们来看看`...

Global site tag (gtag.js) - Google Analytics