Programmation mobile Android avec Android Studio
Répondre à la discussion
Affichage des résultats 1 à 11 sur 11

Programmation mobile Android avec Android Studio



  1. #1
    Gilles BILLARD

    Programmation mobile Android avec Android Studio


    ------

    Bonjour,
    J'ai bientôt 63 ans et je m'ennuie l'hiver; Alors chaque année j'apprend quelque chose pour passer le temps.
    Cette année j'ai eu envie de programmer une application pour téléphone cellulaire sous Android pour apprendre Java et Android.
    Ca tourne a peu près comme je veux mais j'ai un problème à résoudre; J'ai l'intuition de ce qu'il faudrait faire, mais je ne sais pas comment....
    L'objet est un thermomètre de grande précision avec un capteur sur le bus USB, (technologie OneWire)
    L'interface principale (UI) permet de choisir un capteur dans une liste (spinner), affiche la température (textview)et un graphique (MPAndroidChart) reprend l'historique des mesures
    Bien sur, les mesures sont répétitives (toutes les X secondes) ; J'ai géré ca via un Handler et un Runnable qui lance des échanges en binaire sur l'USB une fois que l'on a sélectionné un thermomètre parmi ceux qui sont disponibles sur le bus 1W.
    J'ai également un layout et une activité pour gérer les préférences.
    Mon problème est le suivant:
    Quand je retourne dans la main UI après avoir choisi une ou plusieurs préférences, la tache répétitive est stoppée; Vu mon programme, ca me semble normal.
    Ma question:
    Comment faire pour que les mesures se relancent automatiquement sans avoir à re-sélectionner un capteur et par ce fait réactiver le runnable ?
    Mon intuition:
    Je crois qu'il faudrait sauvegarder un contexte quand je vais voir les préférences et le restaurer quand je ferme le layout des préférences; Mais je ne sais pas faire....

    -----

  2. #2
    invite830075ec

    Re : Programmation mobile Android avec Android Studio

    Bonjour,
    peut-être en utilisant un AtomicBoolean
    http://mathias-seguy.developpez.com/...memoires/#L5-1

  3. #3
    invitefb78843a

    Re : Programmation mobile Android avec Android Studio

    Bonjour,
    Votre présentation n'est totalement claire et avec ça j'essaye de t'aider
    1- Il faut utiliser genymotion pour les test des résultat et l'application
    2- Merci de préciser vos outils de travail et imprime écran pour votre code

  4. #4
    JPL
    Responsable des forums

    Re : Programmation mobile Android avec Android Studio

    Citation Envoyé par anselmasson Voir le message
    et imprime écran pour votre code
    Quoi ?
    Rien ne sert de penser, il faut réfléchir avant - Pierre Dac

  5. A voir en vidéo sur Futura
  6. #5
    Gilles BILLARD

    Re : Programmation mobile Android avec Android Studio

    Citation Envoyé par anselmasson Voir le message
    ........1- Il faut utiliser genymotion pour les test des résultat et l'application
    2- Merci de préciser vos outils de travail et imprime écran pour votre code
    Mon IDE est Android Studio; Il permet le debug même avec le port USB occupé par le thermomètre grâce a ADB via WiFi.
    Quand au code il est un peu long; Je vais voir a le contracter (collapse) pour montrer ce qui est important....
    Quand a AtomicBoolean; LOL, j'ai cru a une blague, mais non ca existe !!! je regarde ca en détail, je tente de comprendre et je vous en dis plus....
    ++
    Dernière modification par Gilles BILLARD ; 11/02/2017 à 17h17.

  7. #6
    Gilles BILLARD

    Re : Programmation mobile Android avec Android Studio

    Code:
      
    .............
        @Override
        public void onPause() {
            super.onPause();
            if (myHandler != null)
                myHandler.removeCallbacks(mesuresTemperature); // On arrete le callback de la mesure répétitive
        }
    
        @Override
        public void onResume() {
            super.onResume();
            //actualisation de l'écran
            SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(this);
            String TH = sharedPrefs.getString("tMax", "100");
            ((TextView) findViewById(R.id.tempMax)).setText(TH);// Actualisation de la limite haute
            String TL = sharedPrefs.getString("tMin", "00");
            ((TextView) findViewById(R.id.tempMin)).setText(TL);// Actualisation de la limite basse
            //Effacement des lignes de limites éventuelles
            mChart.getAxisLeft().removeAllLimitLines();
            // Repositionnement de la ligne de limite haute
            LimitLine llHXAxis = new LimitLine(Float.parseFloat(sharedPrefs.getString("tMax", "300")), "MAXI");
            llHXAxis.setLineWidth(4f);
            llHXAxis.enableDashedLine(10f, 10f, 0f);
            mChart.getAxisLeft().addLimitLine(llHXAxis);
            // Repositionnement de la ligne de limite basse
            LimitLine llLXAxis = new LimitLine(Float.parseFloat(sharedPrefs.getString("tMin", "00")), "MINI");
            llLXAxis.setLineWidth(4f);
            llLXAxis.enableDashedLine(10f, 10f, 0f);
            mChart.getAxisLeft().addLimitLine(llLXAxis);
            // Lancement des mesures répétitives sur le capteur sélectionné( le 1er par défaut)
            ((Spinner) findViewById(R.id.romIDSpinner)).setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
                        @Override
                        public void onItemSelected(AdapterView<?> parent, View view,
                                                   int position, long id) {
                            // Vérifie que l'Id est bien celle d'un capteur de température 1W avant de lancer la boucle pour rien
                            if (sUsbController.isThermometreDevice(sUsbController.ROM_NO_LIST[romIDSpinner.getSelectedItemPosition()])) {
                                if (myHandler != null)
                                    myHandler.removeCallbacks(mesuresTemperature);
                                myHandler = new Handler();
                                myHandler.postDelayed(mesuresTemperature, getResources().getInteger(R.integer.mInterval));
                            }
                        }
                        @Override
                        public void onNothingSelected(AdapterView<?> parent) {
                        }
                    });
    
        }
        public void onStop() {
            super.onStop();
        }
    
        public void onDestroy() {
            super.onDestroy();
            if (myHandler != null)
                myHandler.removeCallbacks(mesuresTemperature); // On arrete le callback de la mesure répétitive
            getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);// Rétablissement de l'économiseur d'écran
        }
    Voila, ca se passe dans le "onResume() " , la ligne écrite en rouge
    Au départ du programme l'UI apparait et rien ne se passe puisque la recherche de composants sur le bus 1W n'a pas été lancée.
    Mais une fois la recherche activée par appui sur une bouton de commande et que un ou plusieurs thermomètres ont été détectés et que leur(s) Code (ID) a été mémorisé dans le spinner, alors l'écouteur détecte la sélection par défaut (le premier de la liste) et active la mesure répétitive.
    Mais une fois passé par l'activité "préférences" et le retour dans "l'activité principale", l'écouteur ne voit rien de changé dans le spinner, on n'y passe plus et donc la tache répétitive n'est pas réactivée.

    Voila, c'est évident que je me comprends, mais de là à me faire comprendre....

  8. #7
    Gilles BILLARD

    Re : Programmation mobile Android avec Android Studio

    Voila a quoi ca ressemble:

    Nom : thermophonemetre.jpg
Affichages : 92
Taille : 93,3 Ko

  9. #8
    invite830075ec

    Re : Programmation mobile Android avec Android Studio

    J'espère qu'un crac Android va passer par là. J'en ai plus fait depuis 2 ans, et rien que le lancement d'Android Studio met à genou mon PC.

  10. #9
    Gilles BILLARD

    Re : Programmation mobile Android avec Android Studio

    Citation Envoyé par satinas Voir le message
    J'espère qu'un crac Android va passer par là. J'en ai plus fait depuis 2 ans, et rien que le lancement d'Android Studio met à genou mon PC.
    Aïe, pas drôle ça !
    Perso, je peux rester 2ans sans faire appel a FS, mais là, j'ai 2 topics en cours et un autre auquel je participe (en remerciement de l'aide qu'on peut m'apporter par ailleurs)
    Mais si personne de FS passe par là, j'irai sur un fofo de spécialistes que j'aime bien aussi.

  11. #10
    invite830075ec

    Re : Programmation mobile Android avec Android Studio

    J'ai replongé dans mes programmes Android. La conversion des applis Eclipse vers Android Studio marche bien, c'est ce qui me faisait un peu peur.
    J'ai crééé en début de fichier source de l'activité principale une variable -> private static String param = "";
    Ensuite cette variable je peux la modifier et la lire à tout moment dans l'appli, et sa valeur est conservée même si l'activité a été masquée puis réapparait. Tu peux t'en servir pour stocker l'info capteur sélectionné, et afficher sa valeur par un toast() à tout moment.
    Elle permettra lors du onResume() de savoir si un capteur a été selectionné précédemment.
    Je trouve cela un peu simple comme solution, j'espère qu'il n y a pas un vice caché

  12. #11
    Gilles BILLARD

    Re : Programmation mobile Android avec Android Studio

    Merci pour l'idée; Oui, ca devrait fonctionner comme expliqué... il faut que je teste..
    J'ai également pensé que je pouvais lancer systématiquement la tache récurrente (de mesure), dans le onResume, sans me soucier du spinner qui liste les codes, puis ne le traiter le spinner qu'a l'intérieur du runnable.
    Du coup, toutes les X secondes, soit ca effectue une mesure si un item du spinner existe, est sélectionné et que c'est un thermometre, soit ca ne fait rien et rien ne changera dans l'UI principale.

Discussions similaires

  1. Problème pour passer 2 variables entre 2 activités sur android studio
    Par foudefoot dans le forum Programmation et langages, Algorithmique
    Réponses: 1
    Dernier message: 26/11/2016, 13h46
  2. android studio
    Par invite8706c50c dans le forum Programmation et langages, Algorithmique
    Réponses: 5
    Dernier message: 06/10/2016, 17h15
  3. SIG mobile et gratuit sur androïd
    Par cherbe dans le forum Logiciel - Software - Open Source
    Réponses: 1
    Dernier message: 25/06/2015, 11h34
  4. [Android]Rooter son mobile
    Par invite6518ba45 dans le forum Matériel - Hardware
    Réponses: 3
    Dernier message: 20/12/2014, 15h18
  5. Programmation sous Android (JAVA) avec Eclipse
    Par invite5c98d667 dans le forum Programmation et langages, Algorithmique
    Réponses: 0
    Dernier message: 13/03/2013, 10h12