How to make the module that determines the volume keys

:information_source: Attention Topic was automatically imported from the old Question2Answer platform.
:bust_in_silhouette: Asked By iroman

I want to make a module that could determine pressing the volume buttons Android devices. Although I do not know java, but I found the code that I need on the stackoverflow:

@Override
public boolean dispatchKeyEvent(KeyEvent event) {
    int action = event.getAction();
    int keyCode = event.getKeyCode();
    switch (keyCode) {
        case KeyEvent.KEYCODE_VOLUME_UP:
            if (action == KeyEvent.ACTION_DOWN) {
                //TODO
            }
            return true;
        case KeyEvent.KEYCODE_VOLUME_DOWN:
            if (action == KeyEvent.ACTION_DOWN) {
                //TODO
            }
            return true;
        default:
            return super.dispatchKeyEvent(event);
    }
}

Then I created an application in android studio that works successfully on my device and determines the volume buttons.
Java code from the application:

package com.test.exampleapp;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.KeyEvent;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

    TextView myTextView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        myTextView = (TextView)findViewById(R.id.myTextView);
    }

    @Override
    public boolean dispatchKeyEvent(KeyEvent event) {
        int action = event.getAction();
        int keyCode = event.getKeyCode();
        switch (keyCode) {
            case KeyEvent.KEYCODE_VOLUME_UP:
                if (action == KeyEvent.ACTION_DOWN) {
                    myTextView.setText("Volume up pressed!");
                }
                return true;
            case KeyEvent.KEYCODE_VOLUME_DOWN:
                if (action == KeyEvent.ACTION_DOWN) {
                    myTextView.setText("Volume down pressed!");
                }
                return true;
            default:
                return super.dispatchKeyEvent(event);
        }
    }
}

Then I tried to convert this code into code for the module:

package org.godotengine.godot;

import android.app.Activity;
import android.util.Log;
import android.view.KeyEvent;

public class GodotVolumeButtons extends Godot.SingletonBase {
	
	private Activity activity = null; // The main activity of the game
	private int instance_id = 0;
	
	public void set_id(int instance_id)
	{
		this.instance_id = instance_id;
		Log.d("godot", "GodotVolumeButtons: set_id");
	}
	
	// @Override
	public boolean dispatchKeyEvent(KeyEvent event) {
		int action = event.getAction();
		int keyCode = event.getKeyCode();
		switch (keyCode) {
			case KeyEvent.KEYCODE_VOLUME_UP:
				if (action == KeyEvent.ACTION_DOWN) {
					Log.d("godot", "Volume down pressed!");
					GodotLib.calldeferred(instance_id, "_on_volume_up_pressed", new Object[] { });
				}
				return true;
			case KeyEvent.KEYCODE_VOLUME_DOWN:
				if (action == KeyEvent.ACTION_DOWN) {
					Log.d("godot", "Volume down pressed!");
					GodotLib.calldeferred(instance_id, "_on_volume_down_pressed", new Object[] { });
				}
				return true;
			default:
				return dispatchKeyEvent(event);
		}
	}
	
	/* Definitions
	 * ********************************************************************** */

	/**
	 * Initilization Singleton
	 * @param Activity The main activity
	 */
 	static public Godot.SingletonBase initialize(Activity activity) {
 		return new GodotVolumeButtons(activity);
 	}

	/**
	 * Constructor
	 * @param Activity Main activity
	 */
	public GodotVolumeButtons(Activity activity) {
		registerClass("GodotVolumeButtons", new String[] { "set_id" });
		this.activity = activity;
	}
}

With this code, export templates are compiled without errors. When debugging, this module is defined, but the calldeferred does not work.
Please tell me, what did I do wrong, or what did not I do?