【问题标题】:How can I detect home button was "double" pressed?如何检测主页按钮被“双”按下?
【发布时间】:2016-05-31 20:49:04
【问题描述】:

我开发了一个应用程序,它使用三星 Galaxy J7 上的摄像头硬件来测量光线并在按下主屏幕时调整显示亮度。但是我遇到了问题,当主屏幕被双击时,我设置了打开内置相机应用程序的快捷方式。摄像头黑屏(摄像头硬件不工作)。我想让我的应用程序能够检测主屏幕双击,以便它可以跳过使用相机硬件并让内置相机应用程序正常工作。

PS。不要建议我使用“长按”或“最近的应用程序键”,因为我已经使用过它们。 ^^

有代码就好了。提前谢谢你。

这是基于@saeed 建议的选项 1 代码:它可以工作,但并非绝对完美。

if(firstHomePressed == true){

                        firstHomePressed = false;
                        secondHomePressed = false;

                        new Handler().postDelayed(new Runnable() {
                            @Override
                            public void run() {
                                if(secondHomePressed == false){
                                    Toast.makeText(mContext,"Pressed Once",Toast.LENGTH_SHORT).show();
                                }
                                else {
                                    Toast.makeText(mContext, "Double Pressed", Toast.LENGTH_SHORT).show();
                                }
                                firstHomePressed = true;
                            }
                        }, 1000);
                    }
                    else{
                        secondHomePressed = true;
                        Toast.makeText(mContext, "secondHomePressed : true", Toast.LENGTH_SHORT).show();
                    }

我发现通过使用“Intent.ACTION_CLOSE_SYSTEM_DIALOGS”来检测我使用的主页键按下动作,双击主页按钮只会调用一次接收器(即使双击主页按钮)。

if (intent.getAction().equals(Intent.ACTION_CLOSE_SYSTEM_DIALOGS))
    {
        String reason = intent.getStringExtra(SYSTEM_REASON);

        //Toast.makeText(context,"ACTION_CLOSE_SYSTEM_DIALOGS : Reason : " + reason ,Toast.LENGTH_LONG).show();

        // Detect home screen key press or "recent app" key pressed when screen is in unlocked state
        if (reason != null)
        {
            MainActivity.logForDebug("MyThread", "reason : " + reason);

            if (reason.equals(SYSTEM_HOME_KEY)) {

            }
        }
    }

无论如何,我得到了解决方案。当按下单或双主页按钮时,我在我的应用程序启动之前设置了更多延迟,以让默认相机应用程序在我的应用程序之前启动。然后默认相机可以正常工作。

但是仍然不知道如何正确检测双击主页按钮。 ^^

【问题讨论】:

  • 复制粘贴我的代码后,您可以发布您的完整代码吗?

标签: android button camera


【解决方案1】:
public class MyView extends View {

    GestureDetector gestureDetector;

    public MyView(Context context, AttributeSet attrs) {
        super(context, attrs);
                // creating new gesture detector
        gestureDetector = new GestureDetector(context, new GestureListener());
    }

    // skipping measure calculation and drawing

        // delegate the event to the gesture detector
    @Override
    public boolean onTouchEvent(MotionEvent e) {
        return gestureDetector.onTouchEvent(e);
    }


    private class GestureListener extends GestureDetector.SimpleOnGestureListener {

        @Override
        public boolean onDown(MotionEvent e) {
            return true;
        }
        // event when double tap occurs
        @Override
        public boolean onDoubleTap(MotionEvent e) {
            float x = e.getX();
            float y = e.getY();

            Log.d("Double Tap", "Tapped at: (" + x + "," + y + ")");

            return true;
        }
    }
}

Source

【讨论】:

  • 感谢您的代码。无论如何,我的应用程序使用服务在后台运行并等到按下主页键。我不确定我是否可以在我的应用程序中使用 MyView 类。
【解决方案2】:

您可以使用处理程序来解决此特定问题。 首先,您必须声明private boolean doublePressedOnce = false;,然后将此代码放入您的 onClick 方法中:

if (doublePressedOnce) {
    // here you can write method to call camera app
Toast.makeText(mContext, "Double Pressed", Toast.LENGTH_SHORT).show();
}

this.doublePressedOnce = true;
new Handler().postDelayed(new Runnable() {
    @Override
    public void run() {
        doublePressedOnce = false;
    }
}, 2000);

【讨论】:

  • 感谢您的代码。很抱歉解释不清楚。想要的是“什么都不做”,如果按下双键并运行我的应用程序,如果只按下一个键。无论如何,我修改了您的代码,如上面修改后的问题所示。不幸的是,它只能在第 1 次和第 2 次按延迟一段时间时起作用,但如果很快按 1 和 2 次,它仍然不起作用。
  • 您只需将我的代码复制粘贴到您的onclick方法中
  • 我已尝试复制粘贴您的代码。无论如何,它以我想要的相反方式工作。我想要的是“如果双击,什么也不做”。我认为在按下主页按钮时实现接收器并不像按下触摸屏那样容易。 ^^
  • 复制粘贴我的代码后能否发布完整代码?
  • 请看我上面的问题更新。我得到了公平的解决方案。但仍然不是完美的。谢谢。
【解决方案3】:

我猜你可以使用手势或计时器,我知道的选择不多: how to implement double click in android

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-05-06
    • 2012-02-11
    • 2018-06-20
    • 1970-01-01
    • 1970-01-01
    • 2019-04-09
    • 1970-01-01
    相关资源
    最近更新 更多