popolbx Posté(e) 31 août 2009 Share Posté(e) 31 août 2009 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) Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Puni Posté(e) 31 août 2009 Share Posté(e) 31 août 2009 (modifié) 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é 31 août 2009 par Puni Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Tama Chan Posté(e) 31 août 2009 Auteur Share Posté(e) 31 août 2009 c'est pas bete du tout comme idée Puni ! Je sais pas si c'est possible, mais je note l'idée. L'ideal serait de pouvoir rajouter un champ dans le calendrier avec une case à cocher mais alors ça, je pense qu'on peut se gratter :D Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
popolbx Posté(e) 31 août 2009 Share Posté(e) 31 août 2009 bein autant le paramétrer dans le soft : une période d inactivité à rentrer sois même. Parce que penser à mettre foxy dans le calendrier à la messe du dimanche...c'est pas gagné. Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
popolbx Posté(e) 31 août 2009 Share Posté(e) 31 août 2009 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. Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Toros Posté(e) 1 septembre 2009 Share Posté(e) 1 septembre 2009 Et bien bonne chance à tous ! Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
eden91940 Posté(e) 1 septembre 2009 Share Posté(e) 1 septembre 2009 ça y est mon appli est postée GeoEdu catégorie Reference/Education je donnerai plus d'infos quand je la mets sur le market !!! bonne chance, déjà un top 20 !!! forza Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
popolbx Posté(e) 1 septembre 2009 Share Posté(e) 1 septembre 2009 ENORME CATASTROPHE :| ça ne fonctionne pas en veille :( .... le verif n est pas effectuée :/..... pfffff Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Tama Chan Posté(e) 1 septembre 2009 Auteur Share Posté(e) 1 septembre 2009 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 ^^ Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
popolbx Posté(e) 1 septembre 2009 Share Posté(e) 1 septembre 2009 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. Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
JeP Posté(e) 1 septembre 2009 Share Posté(e) 1 septembre 2009 HMMMMMMMMMMMMMM ! C'estpour ça que de temps en temps l'écran s'allume comme par magie, et repart en veille après qques secoondes ? Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Tama Chan Posté(e) 1 septembre 2009 Auteur Share Posté(e) 1 septembre 2009 (modifié) 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é 1 septembre 2009 par Tama Chan Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
popolbx Posté(e) 1 septembre 2009 Share Posté(e) 1 septembre 2009 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 ? Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Tama Chan Posté(e) 1 septembre 2009 Auteur Share Posté(e) 1 septembre 2009 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. Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
popolbx Posté(e) 1 septembre 2009 Share Posté(e) 1 septembre 2009 (modifié) 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é 1 septembre 2009 par popolbx Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Tama Chan Posté(e) 1 septembre 2009 Auteur Share Posté(e) 1 septembre 2009 Je suis pas certain que ça fonctionne, prend mon cas: la localisation reseau a une accuracy de 4km, manque de pot je suis encore plus loin, vers 6km. Donc avec ton calcul, je suis plus chez moi :( Sinon les sharedpreferences t'as raison, faut bien en abuser ;) Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Fluckysan Posté(e) 1 septembre 2009 Share Posté(e) 1 septembre 2009 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 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
popolbx Posté(e) 1 septembre 2009 Share Posté(e) 1 septembre 2009 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. Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
20Syl Posté(e) 1 septembre 2009 Share Posté(e) 1 septembre 2009 Tain là on pourrait faire un post dédié : developpement et localisation. Mais faites c'est super interressant, et pourquoi pas exporter tout ce savoir faire par la suite dans un billet sur frandroid.com ou un article sur le wiki ? Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
popolbx Posté(e) 1 septembre 2009 Share Posté(e) 1 septembre 2009 tout à fait.... parce que là ça évitera que des gens se prennent le tête ^^ Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Ldo Posté(e) 1 septembre 2009 Share Posté(e) 1 septembre 2009 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 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
popolbx Posté(e) 1 septembre 2009 Share Posté(e) 1 septembre 2009 1 - si locale est mal fait toutes les autres applis sont mal faites (et locale est mal fait....) 2 - comment utiliser locale dans son appli ? ya une intent qui gère ? Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
xma Posté(e) 1 septembre 2009 Share Posté(e) 1 septembre 2009 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. Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
popolbx Posté(e) 1 septembre 2009 Share Posté(e) 1 septembre 2009 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.... Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
xma Posté(e) 1 septembre 2009 Share Posté(e) 1 septembre 2009 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 ? :) Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Recommended Posts
Rejoignez la conversation
Vous pouvez poster maintenant et vous enregistrez plus tard. Si vous avez un compte, connectez-vous maintenant pour poster.