提问者:小点点

按住程序中的后退按钮


我想从Android程序执行长按后退按钮。
我正在运行以下程序,但未调用onKeyLongPress.
如何从Android程序执行长按后退按钮?

我使用一个名为GenyMotion的模拟器。

  • Mainactivity.java
package com.example.myapplication;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Context;
import android.hardware.input.InputManager;
import android.os.Bundle;
import android.os.SystemClock;
import android.view.InputEvent;
import android.view.KeyCharacterMap;
import android.view.KeyEvent;
import android.view.View;

import java.lang.reflect.Method;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                try {
                    InputManager inputManager = (InputManager) getSystemService(Context.INPUT_SERVICE);
                    Method injectInputEvent = InputManager.class.getMethod("injectInputEvent", InputEvent.class, int.class);

                    long now = SystemClock.uptimeMillis();

                    KeyEvent eventDown = new KeyEvent(
                            now, (now + 2000), KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_BACK, 1, 0,
                            KeyCharacterMap.VIRTUAL_KEYBOARD, 0, KeyEvent.FLAG_LONG_PRESS);

                    injectInputEvent.invoke(inputManager,eventDown, 0);

                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    @Override
    public boolean onKeyLongPress(int keyCode, KeyEvent event) {
        System.out.print("********* Called ********");
        return super.onKeyLongPress(keyCode, event);
    }
}
  • AndroidManifest.xml
    我添加了以下内容。
<uses-permission android:name="android.permission.INJECT_EVENTS" />

共1个答案

匿名用户

null

final GestureDetector gestureDetector = new GestureDetector(new GestureDetector.SimpleOnGestureListener() {
    public void onLongPress(MotionEvent e) {
        Log.e("", "Longpress detected");
    }
});

public boolean onTouchEvent(MotionEvent event) {
    return gestureDetector.onTouchEvent(event);
};