[fpc-pascal] Android/JNI control example

patspiper patspiper at gmail.com
Thu Apr 24 23:39:20 CEST 2014


On 25/04/14 00:12, Felipe Monteiro de Carvalho wrote:
> There is a JNI example app here:
> http://sourceforge.net/p/lazarus-ccr/svn/HEAD/tree/bindings/android-ndk/examples/jnitest/
>
> It doesn't create a button, instead it creates a TextView, and it
> doesn't create it in Pascal, but in Java. Anyway, it is a starting
> point to do whatever you want, including creating buttons in Pascal.
>

Thanks.

I had already progressed but stopped at setContentView. Since I am using 
LazAndroidModuleWizard to kickstart, it seems I can't use that method, 
especially that the code that creates the button is called from the main 
data module. I am trying to find how to "inject" the button into the 
datamodule.

If the concept works, then the workflow of creating an android app with 
Lazarus would be:

- Use a project wizard to setup the project. It will place a fixed java 
snippet in the src project folder and set up manifest files and 
ancillary files.

- Run a tool which reads android "headers" and produces a pascal unit(s) 
according to certain rules.

- Code in pascal :)

The tool will produce for each java class a corresponding pascal class. 
For example, the pascal android media player class will be analogous to 
the java one, but acts as a gateway to the actual java class. It uses 
normal pascal events instead of listeners.

example code for the media player:
   gMediaPlayer := TJMediaPlayer.Create;
   ....
   gMediaPlayer.SetOnCompletionListener(DataModuleOnCompletion);
   gMediaPlayer.SetOnPreparedListener(DataModuleOnPrepared);
gMediaPlayer.SetDataSource('http://www.soundjay.com/button/button-1.mp3');
   gMediaPlayer.Prepare;
   gMediaPlayer.Start;
   ...
   gMediaPlayer.Free;

DataModuleOnCompletion and DataModuleOnPrepared are normal pascal 
methods (TNotifyEvent in this case).

Stephano



More information about the fpc-pascal mailing list