How can i make this extension

I want to make a Control button extension

Which detects if you clicked on the Volume up or down or power button, i have been also asked the chatgpt about this, but it doesn’t do anything else.

But how can i get the code?

This may be helpful for you:

Im making an volume detector extension until this appened on the private list

file:/compiler/android/build/mfcyr/classes/ComponentsTranslation.java
[javac] /compiler/android/src/mfcyr/Com/android/VolumeDetector.java:31: error: cannot find symbol
[javac] private VolumeButtonListener volumeButtonListener;
[javac] ^
[javac] symbol: class VolumeButtonListener
[javac] location: class VolumeDetector
[javac] 1 error

How can i fix this?

Here is the block

public boolean VolUPClicked() {
    boolean VolUP = volumeButtonListener.onVolumeUP(); 

    if (VolUP) {
        return true;
    } else {
        return false;
    }
}

Private list that i added

Private AudioManager audioManager;
Private VolumeButtonListener volumeButtonListener;

Imports

import android.view.KeyEvent;
import android.media.AudioManager;

Here is the complete source code:

Where is the code that im trying to find?
In the site that you gave me.

There isnt such a class.
Use this: import android.media.AudioManager;

Thats was a typo before creating topics

Im making an extension until this happened

Execution Log

Started Compiling Project Service
Buildfile: /compiler/android/build.xml

javac:
[mkdir] Created dir: /compiler/android/build/ljbFD/classes
[javac] Compiling 1 source file to /compiler/android/build/ljbFD/classes
[javac] warning: [options] bootstrap class path not set in conjunction with -source 1.7
[javac]
[javac]
[javac] An annotation processor threw an uncaught exception.
[javac] Consult the following stack trace for details.
[javac] java.lang.IllegalArgumentException: Cannot convert Java type 'android.view.KeyEvent' to Yail type
[javac] at com.google.appinventor.components.scripts.ComponentProcessor.javaTypeToYailType(ComponentProcessor.java:2056)
[javac] at com.google.appinventor.components.scripts.ComponentDescriptorGenerator.outputParameters(ComponentDescriptorGenerator.java:367)
[javac] at com.google.appinventor.components.scripts.ComponentDescriptorGenerator.outputBlockMethod(ComponentDescriptorGenerator.java:346)
[javac] at com.google.appinventor.components.scripts.ComponentDescriptorGenerator.outputComponent(ComponentDescriptorGenerator.java:157)
[javac] at com.google.appinventor.components.scripts.ComponentDescriptorGenerator.outputResults(ComponentDescriptorGenerator.java:385)
[javac] at com.google.appinventor.components.scripts.ComponentProcessor.process(ComponentProcessor.java:1091)
[javac] at com.sun.tools.javac.processing.JavacProcessingEnvironment.callProcessor(JavacProcessingEnvironment.java:802)
[javac] at com.sun.tools.javac.processing.JavacProcessingEnvironment.discoverAndRunProcs(JavacProcessingEnvironment.java:713)
[javac] at com.sun.tools.javac.processing.JavacProcessingEnvironment.access$1800(JavacProcessingEnvironment.java:91)
[javac] at com.sun.tools.javac.processing.JavacProcessingEnvironment$Round.run(JavacProcessingEnvironment.java:1043)
[javac] at com.sun.tools.javac.processing.JavacProcessingEnvironment.doProcessing(JavacProcessingEnvironment.java:1184)
[javac] at com.sun.tools.javac.main.JavaCompiler.processAnnotations(JavaCompiler.java:1170)
[javac] at com.sun.tools.javac.main.JavaCompiler.compile(JavaCompiler.java:856)
[javac] at com.sun.tools.javac.main.Main.compile(Main.java:523)
[javac] at com.sun.tools.javac.main.Main.compile(Main.java:381)
[javac] at com.sun.tools.javac.main.Main.compile(Main.java:370)
[javac] at com.sun.tools.javac.main.Main.compile(Main.java:361)
[javac] at com.sun.tools.javac.Main.compile(Main.java:56)
[javac] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
[javac] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
[javac] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
[javac] at java.lang.reflect.Method.invoke(Method.java:498)
[javac] at org.apache.tools.ant.taskdefs.compilers.Javac13.execute(Javac13.java:57)
[javac] at org.apache.tools.ant.taskdefs.Javac.compile(Javac.java:1388)
[javac] at org.apache.tools.ant.taskdefs.Javac.execute(Javac.java:1117)
[javac] at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:292)
[javac] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
[javac] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
[javac] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
[javac] at java.lang.reflect.Method.invoke(Method.java:498)
[javac] at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:99)
[javac] at org.apache.tools.ant.Task.perform(Task.java:350)
[javac] at org.apache.tools.ant.Target.execute(Target.java:449)
[javac] at org.apache.tools.ant.Target.performTasks(Target.java:470)
[javac] at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1391)
[javac] at org.apache.tools.ant.Project.executeTarget(Project.java:1364)
[javac] at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:41)
[javac] at org.apache.tools.ant.Project.executeTargets(Project.java:1254)
[javac] at org.apache.tools.ant.Main.runBuild(Main.java:830)
[javac] at org.apache.tools.ant.Main.startAnt(Main.java:223)
[javac] at org.apache.tools.ant.launch.Launcher.run(Launcher.java:284)
[javac] at org.apache.tools.ant.launch.Launcher.main(Launcher.java:101)

How can i fix it?

For the blocks :

import android.view.KeyEvent;

@SimpleFunction(description = "")
public boolean VolUP clicked(int keyCode, KeyEvent event){
if (keyCode == KeyEvent.KEYCODE_VOLUME_UP){
return true;
} else {
return false;
}
}
  1. VolUP clicked to VolUpClicked

  2. KeyEvent event to Object event

  3. Cast the event param to KeyEvent class. E.g:

KeyEvent keyEvent = (KeyEvent) event;

After i tested it, this happened

i’m sorry if i made you dissapointed.

Please post the relevant codes to get help.

Here

For the code you made it by yourself

import android.view.KeyEvent;

@SimpleFunction(description = "")
public boolean TestFunction(int keyCode, Object event){
KeyEvent keyEvent = (KeyEvent) event;
if (keyCode == KeyEvent.KEYCODE_VOLUME_UP){
return true;
} else {
return false;
}
}

For the block image


BlockType : boolean
Input 1 = Int
Input 2 = object?

TOPIC NAME = how can i fix this error.

Description =
I’am makinh an audio extension thats checks current audio, so after i made it, i got this syntax error =

/compiler/android/src/MFOQL/com/android/audio/MANAGER/AudioManager.java:50: error: cannot find symbol
[javac] audioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
[javac] ^
[javac] symbol: variable STREAM_MUSIC
[javac] location: class AudioManager
[javac] /compiler/android/src/MFOQL/com/android/audio/MANAGER/AudioManager.java:52: error: cannot find symbol
[javac] audioManager.setStreamVolume(AudioManager.STREAM_MUSIC, audioNumber, 0);
[javac] ^
[javac] symbol: variable STREAM_MUSIC
[javac] location: class AudioManager
[javac] 2 errors
[javac] 4 warnings

Block :

@SimpleFunction(description = "")
public void ChangeMusicAudio(int audioNumber){
AudioManager audioManager = (AudioManager) context.getSystemVolume(Context.AUDIO_SERVICE);

audioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC);

audioManager.setStreamVolume(AudioManager.STREAM_MUSIC, audioNumber, 0);
}

I believe you need to increase your Java knowledge a bit more to develop extensions.

1 Like