PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV Mobile 23 → Import code Java dans projet Android
Import code Java dans projet Android
Débuté par Marc LAZZARINI, 23 oct. 2018 09:33 - 10 réponses
Membre enregistré
212 messages
Popularité : +3 (3 votes)
Posté le 23 octobre 2018 - 09:33
Salut à tous,

J'essaie désespérément d'importer du code Java dans mon projet WM Android, mais je n'y arrive pas. En fait j'ai besoin d'importer une classe complète avec ses imports et ses extends, et même ses override (je sais, je suis gourmand).

import android.app.Activity;
import android.app.ListActitity;
import android.view.KeyEvent;

public class MyActivity extends ListActivity  {
 
    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        super.onKeyDown(keyCode, event);
if (keyCode == KeyEvent.KEYCODE_F1) { 
appelProcedureWL("AppuiTouche","KEYCODE_F1");
return true; 
}
    }
}


Mais j'ai l'impression qu'on ne peut créer du code Java que par procédure, et non par classe...
J'ai bien essayé de créer un .jar avec ma classe , mais comme il contient instruction appelProcedureWL qui se trouve dans le framework de Windev, le compilateur Javac la marque comme unchecked et plante la compilation....

Have an idea ??? Please ;(;(
Posté le 24 octobre 2018 - 10:48
Pourquoi vouloir faire un envoi touche ou appui touche sur Android ?
Si c'est un lecteur de code barre cela ne fonctionne pas comme cela sur Android.
Il faut regarder l'api fournie par le fabricant et l'adapter.
Donne nous plus d'informations, c'est curieux ?
Membre enregistré
212 messages
Popularité : +3 (3 votes)
Posté le 24 octobre 2018 - 17:39
Salut Popoy,

Merci, mais pour le lecteur de CB je me contente de Datawedge correctement paramétré.

Non là, j'ai besoin d'utiliser les touches physiques du terminal. En l'occurence le Skorpio X4 pour cette fois, mais c'est souvent du Zebra. Peut importe en fait.

Je voudrais associer une action dans l'application à l'appui d'une touche physique. F1, F2.. En occurrence, mais le principe sera le même pour n'importe quelle touche.
Et là, ce n'est pas l'api du constructeur qui entre en jeu, mais bel et bien l'évènement onKeyDown et son keyCode. Tout comme on avait sous Windows (CE ou autre).

Merci par avance pour ton aide.

Marc.
Membre enregistré
16 messages
Posté le 05 novembre 2018 - 21:39
Salut Marc,
Sans aller dans les détails de ce que tu veux faire, je te conseillerais d’accéder à ton code JAVA par l'import d'un .JAR au lieu d'essayer de le copier directement dans WinDev.En fonction des besoins, j'utilise les deux méthodes suivantes :
- Si c'est une action simple et directe : Une procédure JAVA 'à la WinDev', directement dans le projet
- Si c'est une action un peu plus complexe encapsulée dans une classe qui expose plusieurs méthodes ou un composant de plusieurs classes Java : Faire le code complet sous Eclipse par ex., générer un .Jar et dans le projet WinDev, accéder au code Java en passant par l'import du .Jar
Message modifié, 05 novembre 2018 - 21:43
Membre enregistré
212 messages
Popularité : +3 (3 votes)
Posté le 06 novembre 2018 - 09:25
Bonjour Carine,

C'est très gentil, je te remercie pour ta réponse. Mais le fait que je veuille appeler une procédure WinDev depuis le code Java m'empêche de passer par une librairie externe en .jar.


Entre temps j'ai trouvé comment brancher la gestion des évènements de type OnKeyDown, mais visiblement j'ai fait ce travail pour rien car en version 24 ce sera en natif…


Cordialement,
Marc.
Posté le 07 novembre 2018 - 10:46
@marc, félicitations.
peut tu mettre l'info pour ceux qui n'auront pas la 24.
merci d'avance.
Membre enregistré
212 messages
Popularité : +3 (3 votes)
Posté le 07 novembre 2018 - 15:02
J'avais pensé que ça n'intéressait personne d'autre que moi.
C'est curieux ?

popoy a écrit :
@marc, félicitations.
peut tu mettre l'info pour ceux qui n'auront pas la 24.
merci d'avance.


popoy a écrit :
Pourquoi vouloir faire un envoi touche ou appui touche sur Android ?
Si c'est un lecteur de code barre cela ne fonctionne pas comme cela sur Android.
Il faut regarder l'api fournie par le fabricant et l'adapter.
Donne nous plus d'informations, c'est curieux ?
Membre enregistré
212 messages
Popularité : +3 (3 votes)
Posté le 07 novembre 2018 - 15:21
Donc,

Primo, créer une procédure globale en Java capable d'intercepter les touches appuyées. Je l'ai appelée Android_HookClavier_OnKey(), le nom est libre. :
import android.view.View;
import android.view.KeyEvent;

PUBLIC static void Android_HookClavier_OnKey(string sNomChamp)
{
View v = getView(sNomChamp);
v.setOnKeyListener(new View.OnKeyListener()
{
@Override PUBLIC boolean onKey(View v, int keyCode, KeyEvent Event)
{
IF (Event.getAction() == KeyEvent.ACTION_DOWN)
{
boolean valRetour;
valRetour = appelProcedureWL_boolean("WL_HookClavier", keyCode);
RETURN valRetour;
}
RETURN False;
}
});
}


Cette procédure créé un Listener sur le champ dont le nom sera passé en paramètre.
Quand un appui touche est détecté sur ce champ, ça appelle automatiquement la procédure globale en WL que j'ai appelé WL_HookClavier en lui passant en paramètre le KEY_CODE de la touche appuyée.

Procedure WL_HookClavier(nKeyCode est un entier)
sCar est une chaîne UNICODE
SELON nKeyCode
CAS KEYCODE_F1, KEYCODE_F2
// Traitez ce que vous voulez si F1 ou F2 est appuyé (ici juste pour l'exemple)
RENVOYER Vrai // La touche est interceptée, pas de traitement par l'OS

AUTRE CAS
RENVOYER Faux // Touche non interceptée, on laisse l'OS gérer.

FIN


Après c'est à décliner comme vous le voulez, et à vous de vous débrouiller pour renvoyer le traitement vers la fenêtre ouverte, mais ça vous savez faire et puis c'est un autre sujet.

Ha oui au fait ! Pour me simplifier la compréhension du code, j'ai créé des constantes avec le nom et la valeur des KEY_CODE :
CONSTANT
KEYCODE_0 = 0x00000007
KEYCODE_1 = 0x00000008
KEYCODE_2 = 0x00000009
KEYCODE_3 = 0x0000000a
KEYCODE_4 = 0x0000000b
KEYCODE_F1 = 0x00000083
KEYCODE_F2 = 0x00000084
KEYCODE_F3 = 0x00000085
KEYCODE_NUMPAD_0 = 0x00000090
KEYCODE_NUMPAD_1 = 0x00000091
KEYCODE_NUMPAD_2 = 0x00000092
KEYCODE_NUMPAD_3 = 0x00000093
KEYCODE_NUMPAD_4 = 0x00000094
// etc.

La liste des KEY_CODE est ici : https://developer.android.com/reference/android/view/KeyEvent

Pour brancher la gestion des évènements, ça se passe dans le traitement Fin d'Initialisation de la fenêtre :
Android_HookClavier_OnKey(SAI_Scan..Nom)


Là je l'ai branché sur un champ de texte appelé SAI_Scan. Il faut le faire sur tous les champs sur lesquels vous voulez pouvoir détecter la touche appuyée.

Par contre je n'ai pas réussi à le gérer au niveau de l'Activity (la fenêtre), mais je sais que c'est faisable aussi.

Si ça peut aider, c'est cool.

Marc.
Membre enregistré
212 messages
Popularité : +3 (3 votes)
Posté le 07 novembre 2018 - 15:23
Et si quelqu'un a la variante pour l'utiliser au niveau de l'Activity je suis preneur.
Posté le 16 novembre 2018 - 10:50
Bonjour,

J'essaye d’implémenter le code pour intercepter les touches (F10,F11,...) sur un terminal Zebra Android 7.1.

Le code d'interception fonctionne parfaitement et me permet d’exécuter une procédure WD mais je rencontre un problème.
Lorsque cette procédure ouvre une nouvelle fenêtre (via Info()) l'application crash.
Le problème n’apparaît pas si je remplace la fonction Info() par un ToastAffiche().

Est-ce que quelqu’un à déjà rencontrer ce genre de problème ?

Merci d'avance
Membre enregistré
212 messages
Popularité : +3 (3 votes)
Posté le 16 novembre 2018 - 11:15
J'ai eu le même problème oui. Je l'ai contourné mais je ne sais plus comment. Je dois partir, mais je verrai si ce soir j'ai le temps de regarder et te répondre.