Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Cross-Platform-Entwicklung (https://www.delphipraxis.net/91-cross-platform-entwicklung/)
-   -   Android: Context über JNI an Java Code übergeben (https://www.delphipraxis.net/180863-android-context-ueber-jni-java-code-uebergeben.html)

stoxx 25. Jun 2014 11:59

Android: Context über JNI an Java Code übergeben
 
ich bin gerade dabei, einen DEX Class Loader mit dieser Methode umzusetzen:

http://www.pclviewer.com/android/androidJNI.html

Das funktioniert mit nativen Datentypen auch soweit ganz gut.
Es gibt nun in meiner JAVA Klasse eine Funktion


Code:
public int SetContext(Context newContext ){
  this.context = newContext;
}
deren ID ich damit hole:

Delphi-Quellcode:
         MethodID_SetContext := TJNIResolver.GetJavaMethodID((jTempClass as ILocalObject).GetObjectID,'SetContext', '(Landroid/content/Context;)I');


So habe ich es probiert, zu übergeben, funktioniert aber nicht. Scheint ja auch ein Interface zu sein, wie komme ich zum "Object" ?


Delphi-Quellcode:
jIntResult :=JavaEnv^.CallIntMethodA(JavaEnv, JavaObjectID, MethodID_SetContext, @SharedActivityContext );

vielen Dank!

stoxx 25. Jun 2014 16:11

AW: Android: Context über JNI an Java Code übergeben
 
das geht leider auch nicht :cry:
Das ist noch die wahrscheinlichste Lösung, die meiner Meinung nach funktionieren hätten müssen.

Delphi-Quellcode:
var
  jv:JNIValue;
  JavaObjectID: JNIObject;
  jIntResult : JNIInt;
begin
  JavaObjectID := (SharedActivityContextt as ILocalObject).GetObjectID;
  jv.l := JavaObjectID;
  jIntResult :=JavaEnv^.CallIntMethodA(JavaEnv, JavaObjectID, MethodID_SetContext, @jv );
auch das geht nicht:

Delphi-Quellcode:
var
  params: array of JNIObject;
  JavaObjectID: JNIObject;
  jIntResult : JNIInt;
 
begin

  SetLength(params, 1);
  JavaObjectID := (SharedActivityContextt as ILocalObject).GetObjectID;
  params[0] := JavaObjectID;
  jIntResult :=JavaEnv^.CallIntMethodV(JavaEnv, JavaObjectID, MethodID_SetContext, params );

:cry:

stoxx 26. Jun 2014 08:21

AW: Android: Context über JNI an Java Code übergeben
 
ha! .. es geht doch .. oh man .. das kommt davon, wenn man fremde Quelltexte übernimmt und dan aus zeitgründen für Feldvariablen nicht das gewohnte "F" bennutzt.

Für alle, die es interessiert, nun läuft es mit: (der zweite Parameter war falsch)

var
params: array of JNIObject;
JavaObjectID: JNIObject;
jIntResult : JNIInt;

begin

SetLength(params, 1);
JavaObjectID := (SharedActivityContextt as ILocalObject).GetObjectID;
params[0] := JavaObjectID;
jIntResult := FJavaEnv^.CallIntMethodV(FJavaEnv, FJavaObjectID, FMethodID_SetContext, params );


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:11 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz