在5.0之前的版本中,我们可以在phoneWindowManager里监听key_code_F12键来获取recent键的点击事件,但在如今版本中已经不能这样做了,recent键被单独拿了出来,我们可以在

/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarFragment.java

中的onRecentsClick(View v) 方法中监听到

    private void onRecentsClick(View v) {    if (LatencyTracker.isEnabled(getContext())) {        LatencyTracker.getInstance(getContext()).onActionStart(                LatencyTracker.ACTION_TOGGLE_RECENTS);    }    mStatusBar.awakenDreams();    mCommandQueue.toggleRecentApps();}

也可以在

SystemUI/src/com/android/systemui/recents/RecentsImpl.java

中的 startRecentsActivity(ActivityOptions opts, final AppTransitionAnimationSpecsFuture future) 方法中做监听

private void startRecentsActivity(ActivityOptions opts,        final AppTransitionAnimationSpecsFuture future) {    Intent intent = new Intent();    intent.setClassName(RECENTS_PACKAGE, RECENTS_ACTIVITY);    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK            | Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS            | Intent.FLAG_ACTIVITY_TASK_ON_HOME);    HidePipMenuEvent hideMenuEvent = new HidePipMenuEvent();    hideMenuEvent.addPostAnimationCallback(() -> {        Recents.getSystemServices().startActivityAsUserAsync(intent, opts);        EventBus.getDefault().send(new RecentsActivityStartingEvent());        if (future != null) {            future.composeSpecsSynchronous();        }    });    EventBus.getDefault().send(hideMenuEvent);    // Once we have launched the activity, reset the dummy stack view tasks so we don't hold    // onto references to the same tasks consumed by the activity    mDummyStackView.setTasks(mEmptyTaskStack, false /* notifyStackChanges */);}

有些手机厂商开发了手势模式,和系统原生走的是完全不同的方法
我们可以在

SystemUI/src/com/android/systemui/statusbar/phone/QuickStepController.java

中的startQuickStep(MotionEvent event)方法中监听到

    private void startQuickStep(MotionEvent event) {    mQuickStepStarted = true;    event.transform(mTransformGlobalMatrix);    try {        mOverviewEventSender.getProxy().onQuickStep(event);        if (DEBUG_OVERVIEW_PROXY) {            Log.d(TAG_OPS, "Quick Step Start");        }    } catch (RemoteException e) {        Log.e(TAG, "Failed to send quick step started.", e);    } finally {        event.transform(mTransformLocalMatrix);    }    mOverviewEventSender.notifyQuickStepStarted();    mHandler.removeCallbacksAndMessages(null);    if (mHitTarget != null) {        mHitTarget.abortCurrentGesture();    }    if (mQuickScrubActive) {        animateEnd();    }}

在手势模式中对home键还做了左右滑动事件的监听,我们同样可以在该类的 startQuickScrub() 中监听到

    private void startQuickScrub() {    if (!mQuickScrubActive) {        mQuickScrubActive = true;        mLightTrackColor = mContext.getColor(R.color.quick_step_track_background_light);        mDarkTrackColor = mContext.getColor(R.color.quick_step_track_background_dark);        ObjectAnimator trackAnimator = ObjectAnimator.ofPropertyValuesHolder(this,                PropertyValuesHolder.ofFloat(mTrackAlphaProperty, 1f),                PropertyValuesHolder.ofFloat(mTrackScaleProperty, 1f));        trackAnimator.setInterpolator(ALPHA_IN);        trackAnimator.setDuration(ANIM_IN_DURATION_MS);        ObjectAnimator navBarAnimator = ObjectAnimator.ofFloat(this, mNavBarAlphaProperty, 0f);        navBarAnimator.setInterpolator(ALPHA_OUT);        navBarAnimator.setDuration(ANIM_OUT_DURATION_MS);        mTrackAnimator = new AnimatorSet();        mTrackAnimator.playTogether(trackAnimator, navBarAnimator);        mTrackAnimator.start();        try {            mOverviewEventSender.getProxy().onQuickScrubStart();            if (DEBUG_OVERVIEW_PROXY) {                Log.d(TAG_OPS, "Quick Scrub Start");            }        } catch (RemoteException e) {            Log.e(TAG, "Failed to send start of quick scrub.", e);        }        mOverviewEventSender.notifyQuickScrubStarted();        if (mHitTarget != null) {            mHitTarget.abortCurrentGesture();        }    }}

更多相关文章

  1. android Studio与数据库SQLserver连接实现登录
  2. Android(安卓)WebView常见问题及解决方案汇总 .
  3. 超简单理解Android四大组件
  4. Android(安卓)Your content must have a ListView whose id attr
  5. 安卓基础知识
  6. 判断Edittext是否为几种空方法
  7. Android心得4.5--SQLite数据库--事务处理、ListView列表显示
  8. Android模拟器调试“掉线”问题解决方法
  9. Android(安卓)学习记录一:Activity

随机推荐

  1. Android(安卓)Spinner 文字居中、其下拉
  2. How to discovery memory usage on my ap
  3. Android Studio官方文档之Android Studio
  4. android log日志工具的使用
  5. Android技能树 — 树基础知识小结(一)
  6. Android 消息推送
  7. Android在澳大利亚市场彻底击败iPhone
  8. O1--添加假对焦功能并支持对焦
  9. 1.android体系结构介绍
  10. Android(安卓)- 准备工作【仿】淘宝App