Aller au contenu

Vos applis ADC2


Tama Chan

Recommended Posts

héhé voilà..... là en localisation réseau le test de midi a été catastrophique.

Si je regarde dans google map, il localise le boulot à deux km de mon boulot ^^

Du coup j'y suis bien passé ce matin en allant bosser....(mode GPS) mais pas en allant bouffer à midi.(mode réseau)

Bon du coup c'est n'importe quoi...

Je vais refaire le moteur de détection à la main.

Si réseau activé je prends réseau.

Sinon gps....

Je lance un scan de la localisation (on verra si la batterie morfle), avec temps entre deux chgt de 5min mini 1Km.

(au pire je le lance toutes les X min)

Une fois la localisation trouvée je fais un calcul à la main pour savoir si je suis à 1Km d'un point.

Si ça roule .... je balance à l'ADC...si ça roule pas...je balance à l'adc mais je me prépare à de vilains commentaires ^^

(parce que bon on peu tout faire en manuel sinon)

Lien vers le commentaire
Partager sur d’autres sites

  • Réponses 138
  • Créé
  • Dernière réponse

Top forumeurs sur ce sujet

Tama Chan j'avais une suggestion pour ton application. Je ne sais absolument pas si c'est réalisable, mais ca pourrait être assez sympa je pense :

Serait-il possible que ton application regarde les évènements du calendrier, puis, s'il trouve un mot-clé précis que tu définis (Foxy par exemple) dans un champ précis (comme dans le champ Lieu par exemple, ou autre), passe le téléphone en silencieux pendant la durée de l'évènement ?

Il faut juste savoir si une application peut accéder au calendrier personnel pour trouver un mot-clé.

Modifié par Puni
Lien vers le commentaire
Partager sur d’autres sites

c'était tendu mais appli postée ^^

et en théorie (emulateur) fonctionne niquel ^^ (merci le service, ct tout con)

j'en ai tellement chié alors que la solution tient en quelques lignes (même avec le reseau, suffit de rajouter l accuracy à la distance mini ^^), du coup je ferais ptetre un tutorial avec discussion.

devicem.png

Lien vers le commentaire
Partager sur d’autres sites

popolbox, il faut faire un wakelock en veille, sinon android risque de faire tourner ton service que quand l'utilisateur sort de la veille son telephone. Ou alors ça peut arriver si d'autres apps font un wakelock partiel au meme moment que ta verif.

si t'as besoin d'info sur comment faire dit le moi. Et je suis interessé par ta solution de geolocalisation histoire d'apprendre un peu ^^

Lien vers le commentaire
Partager sur d’autres sites

ouais le pb du wakelock c'est qu'il réveille le tél (je fais ça avec keepscreen)...

et techniquement j ai pas enve de voir le tel sortir de veille tout seul.

Et surtout l appli est sur l adc et pas modifiable non ? (je vies de vérifier on peu plus modifier).

Bon bein je cherche comment faire tourner ça en veille et je ferais un sujet sur le truc.

Lien vers le commentaire
Partager sur d’autres sites

popolbx, il y a plusieurs wakelock, celui qui nous interesse, c'est juste reveiller le cpu, pas l'ecran:

public class FoxyWakeLock {
   static final String TAG = "FoxyRing";
   static FoxyWakeLock instance;
   static PowerManager powerManager;
   protected static WakeLock wakeLock;

   public static synchronized FoxyWakeLock getInstance() {
       if (instance == null)
           instance = new FoxyWakeLock();
       return instance;
   }

   public void acquireLock(Context context) {
       powerManager = (PowerManager)context.getSystemService(Context.POWER_SERVICE);
       wakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "FoxyWake");
       wakeLock.acquire();
   }

   public void releaseLock() {
       wakeLock.release();
   }


}

ensuite quand tu configure ton alarme avec un BroadcastReceiver au lieu de lancer le service:

public class FoxyReceiver extends BroadcastReceiver {
   static final String TAG = "FoxyRing"; 


   @Override
   public void onReceive(Context context, Intent intent) {
       Log.d(TAG, "Received Alarm, acquiring lowest WakeLock and Start FoxyService");

       FoxyWakeLock wakeLock = FoxyWakeLock.getInstance();
       wakeLock.acquireLock(context);
       context.startService(new Intent(context, FoxyService.class));

   }
}

Une fois que t'as fini tes trucs dans ton service, t'as juste à faire:

           FoxyWakeLock wakeLock = FoxyWakeLock.getInstance();
           wakeLock.releaseLock();
           stopSelf();

Avec ça tu fais un wakelock propre et qui reveille que le CPU, et ce uniquement pendant que tu en as besoin, pas de gaspillage de batterie.

A noter qu'une alarme qui declenche un BroadcastReceiver créé un wakelock, mais qui dure uniquement le temps du receiver. Donc c'est pour ça qu'il faut creer ton propre wakelock si ton service est long. Si c'est un truc super rapide à faire, tu peux ecrire ton code dans le broadcastreceiver, sinon, il faut faire ton propre wakelock.

si vous avez votre tel qui s'allume par magie et s'eteint, c'est que vous avez un prog qui gere mal les wakelock.

Et en effet on peut plus modifier son app.

EDIT: j'ai oublié de preciser qu'il te faut ajouter la permission WAKE_LOCK dans ton manifest

Modifié par Tama Chan
Lien vers le commentaire
Partager sur d’autres sites

ah bein j avais trouvé cette solution efectivement..j'attends ce soir pour tester.

Donc il faut:

- configurer une alarme (au lieu d'un timer dans le service héhé)

- l alarme lock le CPU

- l'alarme lance le service pour la geoloc

- le service unlock le cpu à la fin (problème si ya pas de fin, mais là on peut recoller un timer qui fait le release au bout d'un certain temps)

Sur le net il était salement conseillé de faire un lock à la création du service... super, doit y avoir pleins d'applis qui font ça et le cpu pars jamais en veille :mad:

A noter que du coup le CPU est en veille donc les gens qui se font des ROMS pour downclocker le CPU en veille ça leur sers à que dalle, à part faire ramer tous les services ^^. Ils von se retrouver avec pleins d'applis qui marchent mal.. non ?

Lien vers le commentaire
Partager sur d’autres sites

en effet il ne faut pas creer le lock quand le service se lance, mais avant de le lancer, car android va programmer le lancement du service, mais ne va pas forcement le faire avant la fin de l'alarme. Donc c'est trop tard.

C'est pour ça que tu dois créer ton wakelock avant de lancer ton service grace a la classe singleton que j'ai faite, et tu pourras utiliser la meme instance de la classe (vu que c'est un singleton) a la fin de ton service. Y a pas plus propre!

Le timer dans un service ne fonctionnera pas, car l'OS risque de killer ton service s'il a besoin de mémoire. Avec une alarme, ton service ne reste pas en mémoire inutilement, et tu peux compter sur la fiabilité de l'OS pour etre sur que ton service fonctionne. En plus quand tu créés une alarme, tu peux lui dire de la repeter, genre toutes les 6 minutes. Si tu veux arreter, t'as juste a annuler ton alarme en utilisant le meme intent.

Ton service devrait toujours avoir une fin en effet et liberer le wakelock.

Apres les gens qui downclock le cpu en veille, je vois pas l'interet car il est utilisé juste par le systeme dans ce cas afin de gerer les choses en interne (alarmes, intent, heure systeme, etc). Meme les applis google comme gmail utilise un wakelock.

Lien vers le commentaire
Partager sur d’autres sites

j'avis bien noté la proprété de ton singleton ^^

Bon je test ça ce soir...combiné avec la détéction qui va bien.

Pur cette détéction je fais un requestUpdate.

Et dans la reception de l evenement je vire la request, puis je calcule la distance entre la location et chaque coordonnées de mes lieux. (ya une méthode pour dans Location en statique).

Et si distance<(location.getAccuracy()+1000 (1Km arbitraire), je suis dans la zone.*

Je note cette zone dans un objet (lui aussi en singleton). Si la zone = la note (bein on y était déjà), sinon on en sors.

MAIS là du coup ça va foirer car vu que l alarme relance le service, si celui ci a été killé je perds mon singleton (qui sera réinstancié..).

J'ai plus qu'à sauver cette zone dans une sharedPreference (un peu crade mais diablement efficace).

Et ce soir je vir l option jamais en veille en dev sur mon magic : on ne m'y reprendra pas ^^

* : a noter qu'hier soir le réseau s'est encombré il ma soudainement détécté la ville d'à coté avec une accuracy de 2500m...ça marchait mais du coup il m'a détécté aussi à gént casino :(. Donc en détéction réseau prévenir les users

de ne pas trop rapprocher leurs zones...sinon GPS.

Modifié par popolbx
Lien vers le commentaire
Partager sur d’autres sites

Thx pour le coup du WakeLock, j'en aurais besoin plus tard ;)

MAIS là du coup ça va foirer car vu que l alarme relance le service, si celui ci a été killé je perds mon singleton (qui sera réinstancié..).

J'ai plus qu'à sauver cette zone dans une sharedPreference (un peu crade mais diablement efficace).

Hum, il vaut pe mieux que tu ailles directement taper dans ta BDD dans ton service, je ne pense pô que le traitement soit lourd ou lent (ou alors j'ai pô compris ton explication XD) :o

Lien vers le commentaire
Partager sur d’autres sites

voilà l'explication, technique et théorique:

beh pour une variable à la con je vais pas me faire chier à la foutre en BDD ^^

@tamachan : pas forcément...si quand tu définit ton chez toi tu localise via le reseau....bein les coordonnées GPS sont bien celles à 6Km de chez toi ^^. Donc tu seras bien chez toi vu qu'il te localise pas chez toi :lol:

bon par contre avant d'être pas localisé chez toi il faudra que tu te tape une dizaine de km...Donc comme expliqué : si ça marche mal...je vais foutre la localisation réseau en prefs... genre "ne pas utiliser le réseau si GPS dispo...".

Disons qu'en ville et périphérie bien fournie, ça marche niquel et ça consomme que dalle.

Tain là on pourrait faire un post dédié : developpement et localisation.

Lien vers le commentaire
Partager sur d’autres sites

désolè si la question est bête mais ...

pourquoi ne pas utiliser Locale ? et le laisser se débrouiller pour le positionnement ?

ne serait-il pas préférable d'avoir une seule application qui gère le positionnement, que d'avoir 2,5,10 applications qui vont chacune pour leur propre compte utiliser le GPS

- notamment au niveau de la batterie ça ne permettrait pas des économies ?

- pour l'utilisateur ça lui fait une seule application où enregistrer/gérer ses lieux utiles. pas besoin de récréer chaque fois ses lieux dans chaque apps

- de même pour le développeur, ça lui permet de se concentrer sur son application et la valeur ajoutée à la localisation

Lien vers le commentaire
Partager sur d’autres sites

désolè si la question est bête mais ...

pourquoi ne pas utiliser Locale ? et le laisser se débrouiller pour le positionnement ?

ne serait-il pas préférable d'avoir une seule application qui gère le positionnement, que d'avoir 2,5,10 applications qui vont chacune pour leur propre compte utiliser le GPS

- notamment au niveau de la batterie ça ne permettrait pas des économies ?

- pour l'utilisateur ça lui fait une seule application où enregistrer/gérer ses lieux utiles. pas besoin de récréer chaque fois ses lieux dans chaque apps

- de même pour le développeur, ça lui permet de se concentrer sur son application et la valeur ajoutée à la localisation

+1 Je pousserais même l'idée d'intégrer ce genre de chose *directement* dans l'os dans une préférence. Après tout ma maison sera la même pour toutes les applis hein :)

Je me demande comment faire remonter ce genre de demande à l'équipe Android core.

Lien vers le commentaire
Partager sur d’autres sites

MAIS YA PAS DE METHODE !!! :P

ils laissent les dev décider c'est volontaire. Ya 3 ecoles pour la localisation:

- précis mais couteux en batterie : GPS

- moins précis mais pas couteux : réseau

- un mix des deux moyennement couteux

Et le choix dépend de l'appli. cf le podcast de romain guy (en news sur frandroid).

Une appli qui a juste besoin de connaitre ta ville utilisera le réseau.

Une appli qui a besoin de savoir ta rue utilisera le GPS

Une appli qui a besoin de savoir si tu passe à moins de 10m d'un autre android utilisera le GPS

Une appli qui a besoin de savoir si tu es pas loin d'un resto utilisera soit l un soit l autre en fct de l user.

tou est un mix entre ou tu es, la tolérance que tu veux, ou tu vas et la tolérance que tu veux....

Lien vers le commentaire
Partager sur d’autres sites

Ca ne change rien à l'idée de base de définir des lieux dans les prefs et un service qui se charge tout seul de remonter les informations pertinentes aux applis qui s'y seraient inscrites. Pour l'instant rien n'existe, certes mais pourquoi pas travailler la dessus justement ? :)

Lien vers le commentaire
Partager sur d’autres sites

Rejoignez la conversation

Vous pouvez poster maintenant et vous enregistrez plus tard. Si vous avez un compte, connectez-vous maintenant pour poster.

Invité
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.




×
×
  • Créer...