PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV Mobile 2025 → Comment intégrer du code Kotlin dans mon appli
Comment intégrer du code Kotlin dans mon appli
Débuté par Jean Turcotte, 04 juin 2025 16:19 - 9 réponses
Membre enregistré
1 332 messages
Posté le 04 juin 2025 - 16:19
Bonjour, je déplore le fait que pcsoft ne fournisse aucun exemple d'utilisation des nouveautés importantes comme le code Kotlin.

J'essaie de tester du code pris sur Internet mais peut importe le code que j'utilise, j'ai toujours l'erreur suivante;
- Le prototype de la fonction native Kotlin n'a pas pu être schématisé...

Je me doute bien qu'il y a des erreurs avec le code mais comment faire pour la déceler. Voici le code de suppression du Presse-Papier trouvé sur le WEB;
import android.content.ClipboardManager
import android.content.Context
import android.content.Context.CLIPBOARD_SERVICE
import android.os.Build
import android.os.Bundle
import android.os.VibrationEffect
import android.os.Vibrator
import androidx.appcompat.app.AppCompatActivity

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val clipboardManager = getSystemService(CLIPBOARD_SERVICE) as ClipboardManager

        if (clipboardManager.hasPrimaryClip()) {
            // Supprimer le contenu du presse-papiers
            clipboardManager.clearPrimaryClip()

            // Optionnel : Vibrer l'appareil pour indiquer que le presse-papiers a été vidé (pour un feedback utilisateur)
            val vibrator = getSystemService(VIBRATOR_SERVICE) as Vibrator
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
                vibrator.vibrate(VibrationEffect.createOneShot(200, VibrationEffect.DEFAULT_AMPLITUDE))
            } else {
                vibrator.vibrate(200)
            }
        } else {
            // Le presse-papiers est déjà vide
            // Vous pouvez afficher un message à l'utilisateur ou prendre une autre action
        }
    }
}


--
Jean Turcotte
WX 2025
Membre enregistré
548 messages
Posté le 04 juin 2025 - 20:52
salut Jean
te fatigue pas, depuis la maj 1 2025, plus moyen de mettre du kotlin,
j'ai fait remonter au support, ils m'ont donné un correctif, et la mise a jour suivante, terminé, de plus le correctif marchait mal

--
José
Membre enregistré
548 messages
Posté le 04 juin 2025 - 21:27
j'ai oublié, moi aussi, j'ai le message, et la compilation plante si je desactive pas la collection de procedures avec du kotlin
donc, je les ai refaites en java

--
José
Membre enregistré
3 705 messages
Posté le 04 juin 2025 - 21:31
Salut Jean,
Je comprends pas trop ta demande
Si ton but est de vider le presse papier alors il suffit de faire
VersPressePapier("")

En effet, toutes les fonctions de presse papier du wlanguage fonctionne sur Android et iOS.
Sinon pour répondre à ta question
Il me semble que ton code est du Java qui contient une classe
Le kotlin ressemble beaucoup au Java
Les lignes suivantes peuvent d'après moi être supprimés
class MainActivity : AppCompatActivity() {
 
     override fun onCreate(savedInstanceState: Bundle?) {
         super.onCreate(savedInstanceState)
         setContentView(R.layout.activity_main)
             // Optionnel : Vibrer l'appareil pour indiquer que le presse-papiers a été vidé (pour un feedback utilisateur)
             val vibrator = getSystemService(VIBRATOR_SERVICE) as Vibrator
             if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
                 vibrator.vibrate(VibrationEffect.createOneShot(200, VibrationEffect.DEFAULT_AMPLITUDE))
             } else {
                 vibrator.vibrate(200)
             }

En plus, il faut souvent rajouter
// Récupération de l'activité en cours
getActiviteEnCours()
// Récupération du "Context" en cours
getContexteApplication()
// Ré
getView("BTN_Bouton1")

Comme indiqué dans l'aide
Après lors de la compilation le compilateur t'indique normalement l'emplacement de l'erreur
Ainsi que l'erreur
(En tout cas c'est comme ça avec Java)
Ce qui aide à modifier le code en conséquence
Par contre je ne pourrais t'aider plus car l'utilisation du kotlin n'existe que depuis la version 28
De WM et je me suis arrêté à la 25
Membre enregistré
1 332 messages
Posté le 04 juin 2025 - 22:36
Bonjour et merci à vous deux pour votre aide. Je pense ne pas avoir été clair dans ma demande.

La commande VersPressePapier(") ajoute une ligne vide au pressePapier mais si tu regardes le pressepapier Samsung (dans le cas d'un mobile Samsung) tu y verras l'historique de toutes les valeurs copiées au Presse-Papier. Pas vraiment sécuritaire, surtout si tu essaie de créer une appli qui gère la sésurité.

Il esiste du code en Kotlin et java pour vider le pressePapier Samsung et donc, de rendre ton appli sécuritaire.

L'exemple en Kotlin était assez simple. Je ne peux malheureusement pas passer par le ST car j'ai downgradé ma version à l'update 2 et depuis, je ne peux plus envoyer de demande.

--
Jean Turcotte
WX 2025
Membre enregistré
1 332 messages
Posté le 05 juin 2025 - 03:58
Je vous fais un suivi puisque j'ai réussi à bidouiller un code qui tend à fonctionner. Voici le code que j'ai testé;
import android.content.ClipboardManager;
import android.content.Context;
import android.widget.Toast;

public static void Procedure2() {
Context context = getApplicationContext();
    try {
        ClipboardManager clipboardManager = (ClipboardManager) context.getSystemService(Context.CLIPBOARD_SERVICE);
        if (clipboardManager != null) {
            clipboardManager.clearPrimaryClip();
            Toast.makeText(context, "Presse-papiers vidé avec succès", Toast.LENGTH_SHORT).show();
        } else {
            Toast.makeText(context, "Impossible d'accéder au presse-papiers", Toast.LENGTH_SHORT).show();
        }
    } catch (Exception e) {
        Toast.makeText(context, "Erreur lors de la vidange du presse-papiers", Toast.LENGTH_SHORT).show();
    }
}


J'obtiens le toast "Presse-papiers vidé avec succès", ce qui m'indique que le presse-papier de mon appli à bel et bien été supprimé mais celui du clavier Samsung contient toujours l'info. Ce qui me fait dire que si je pouvais récupérer le Context du clavier Samsung, je pourrais probablement supprimer son presse-papier,

des idées pour la suite?

--
Jean Turcotte
WX 2025
Membre enregistré
3 705 messages
Posté le 05 juin 2025 - 06:22
Merci pour les infos et le code.
Pour ce qui est du clavier, tu peux désactiver son utilisation dans ton application
Mais cela t'oblige à créer ton propre clavier.
Une autre solution serait peut être de vider le cache de l'application clavier
Voir https://stackoverflow.com/questions/14047895/clear-another-applications-cache
Il y un code pour vider tous les caches à la fin
Membre enregistré
1 332 messages
Posté le 05 juin 2025 - 12:18
Salut Popoy, merci pour l'info.

J'ai intégré le code mais j'obtiens une erreur avec 'activity' alors j'ai ajouté le code suivant pour déclarer l'Activity;
int requestCode = 999;
Activity activity = getActiviteEnCours();
Intent intent = new Intent(StorageManager.ACTION_CLEAR_APP_CACHE);
activity.startActivityForResult(intent, requestCode);


J'ai maintenant une erreur pour StorageManager. Je me demande si je dois imponter une library pour StorageManager et si oui, laquelle?

Je déteste java...

--
Jean Turcotte
WX 2025
Membre enregistré
3 705 messages
Posté le 05 juin 2025 - 15:57
Salut oui l'aide d'Android indique
java.lang.Object
android.os.storage.StorageManager

Comme indiqué sur cette page
https://developer.android.com/reference/android/os/storage/StorageManager
Sur la même page en kotlin se serait
kotlin.Any
android.os.storage.StorageManager

Dans les 2 langages il y aurait un import

C'est un peu le défaut des codes trouvé sur internet
Car les autres EDI ont en général des outils d'ajout des imports automatique
Ce que n'as pas WM
Message modifié, 05 juin 2025 - 16:00
Membre enregistré
1 332 messages
Posté le 05 juin 2025 - 17:24
Salut, j'ai corrigé le code et j'ai pu compiler mais ça ne règle pas mon problème car le presse-Papier reste toujours plein.

J'ai fouillé tout l'avant-midi pour finalement trouvé qu'il s'agissait d'une énorme faille de sécurité sur plusieurs produits Samsung. Il semble que l'entreprise soit avisée et travaille sur un correctif. Cette une énorme brèche de sécurité car non seulement le presse-papier Samsung ne supprime pas son contenu automatiquement, mais il n'a aucune limite de stockage. Tout ce qu'on tape se retrouve dans ce presse-papier en dur, Login, mot de passe etc... bravo Samsung...

En attendant un correctif sérieux de Samsung, j'ai implémenté une écriture de 200 données aléatoires de plus de 24 caractères qui s'ajoute au presse-papier 10 sec après avoir copier-coller ma donnée à utiliser. Pas très chic mais améliore tout de même la sécurité de mon appli mais rend quasi-inutilisable le presse-papier. :merci:

--
Jean Turcotte
WX 2025