Aller au contenu

[Questions+Architecture] Diverses questions pour mon futur dev


Burn2

Recommended Posts

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

Top forumeurs sur ce sujet

J'ai mis Exception e, y a mieux que ça?

Disons que ce n'est pas trop dans mon habitude de programmation, j'ai vraiment l'impression de faire quelque chose de brouillons tout de même. :/

Bon après vivement que j'ai le livre que je compte me prendre pour bien me former à tout parce que là ça me semble bien brouillons. Faut que je regarde aussi pour les interactions avec des base de données embarquées (sqlite??) pour sauvegarder mes profiles et définitions ça sera plus rapide que ce que je suis partis à faire pour charger à partir d'un fichier texte...

Lien vers le commentaire
Partager sur d’autres sites

Punaise hier j'ai eu une révélation!

Il faut que je le pense à l'inverse!

Au lieu de prévoir la période d'inactivité, il faut que je prévoie la période d'activité! et là du coup tout rentre dans l'ordre! (plus de période à cheval sur les journées puisque la période est sur la journée uniquement, et tout est bien facilité!)

En plus je vois comment goupiller la chose facilement, même si ça ne sera pas complet, je vois comment faire niveau profil, comment stocker ça facilement (en fichier texte) et comment tout simplifier l'usine à gaz vers quoi j'étais parti!

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

ça s'annonce pas mal. :)

Concrètement, maintenant que j'ai le cadre et l'idée, voici ce que je compte faire:

Concrètement on est beaucoup à utiliser son téléphone en temps que réveil, et bon il faut le dire, c'est chiant de penser à mettre son téléphone en mode silencieux tous les soirs non?

J'ai vu sweatdream mais ça me semblait trop usine à gaz pour ce que je souhaitais faire, et de plus on ne peut définir qu'une seule période, pas configurable par jour (le week end on a un autre train de vie en général donc pas logique de le remettre en mode normal à partir de 6h30...), et puis bon c'est too much pour juste ce que je veux faire. D'ou un développement en partant de 0. (puis ça va me former un peu)

Partant de ce principe là je me suis dit, bah pourquoi ne pas faire tourner un service qui chargera un profil et le mettra tout seul en mode silencieux (ou vibreur ou mode airplane selon la configuration) selon la plage configurée et activée?

La plage sera configurable par jour. (exemple le lundi de 6h30 à 22h le téléphone est en mode normal, et donc par défaut le reste du temps c'est silence/vibreur ou airplane le dimanche c'est de 10h à 22H etc).

Le profil permettant d'activer rapidement des plages configurées. (exemple un profil vacance, et un profil travail).

Que pensez vous de ce petit projet? :)

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

Au vue de ce que je vois, non c'est le même problème que sweatdream, c'est too much et trop compliqué (raf de la position GPS et du bruit ambiant :D ça va trop consommer pour rien :D), et en plus on ne peut définir qu'une seule heure de plage, pas par jour (super le mode normal à 6h le dimanche ;) ). C'est trop contraignant, moi je veux un programme qu'on oublie qui ne se base que sur l'heure, et ou on bascule entre des profils en fonction de ce qu'on fait. (vacance ou travail, je pense que c'est les profils les plus courants).

EDIT: et en plus je n'ai pas le marquet. (enfin je peux mais je n'ai pas envie de l'installer ainsi que tout le reste et de tout alourdir alors que je ne vais pas me servir des applis interfacés avec google etc, bref too much pour un programme aussi...)

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

J'ai un petit problème avec mon service.

Donc mon service planifie l'alarme (ça ça marche)

Mon broadcast receiver le récupère bien, mais ça ne redémarre pas mon service. ???

Voici le bout de code du broadcast receiver.

public void onReceive(Context context, Intent intent) {

Toast.makeText(context,"Reveil!!!",Toast.LENGTH_SHORT).show();

context.startService(intent);

}

(je vois bien apparaitre réveil preuve que l'horloge marche, mais le startService ne marche pas puisque je ne vois pas mon toast en entrée de on start côté service). Comment faut-il faire?

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

Hum j'ai un problème avec l'horloge.

En fait le réglage du fuseau horaire pose problème.

Si je récupère l'heure actuelle c'est comme si je récupérais l'heure utc et pas celle concernant notre fuseau horaire.

Sur l'émulateur tout se passe bien mais sur mon freerunner sous android 1.5 visiblement le gmt+1 ne passe pas.

Pour récupérer l'heure actuelle j'utilise ça:

Calendar calendar = Calendar.getInstance();

Time now=new Time();

now.hour=calendar.get(Calendar.HOUR_OF_DAY);

now.minute=calendar.get(Calendar.MINUTE);

int day=calendar.get(Calendar.DAY_OF_WEEK)

Ce n'est pas bon?

EDIT: trouvé la solution, un now.setToNow() et ça rox

EDIT2: en fait non time.setToNow() fait n'importe quoi. :/ C'est clairement pas bon je ne sais pas pourquoi mais mon calcule d'alarme ne marche plus tout après ni la comparaison horraire. :??:

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

Quelqu'un peut-il m'expliquer pourquoi le now.setToNow() fait port nawac et ne me récupère pas la bonne heure?

(comprendre que mes comparaisons de dates ne marchent plus après) alors que si j'affecte à la mano comme marqué là:

Time now=new Time();

now.hour=calendar.get(Calendar.HOUR_OF_DAY);

now.minute=calendar.get(Calendar.MINUTE);

c'est bon?

(en sachant que l'heure récupéree est bonne puisque je l'ai affichée pour voir mais que la comparaison ne marche plus?)

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

Tout simplement par:

if (now.after(jNow.getStart()))

Sachant que now c'est le time que tu vois définis juste au dessus, et que jNow.getStart() renvoie un time définit niveau horaire et visiblement quand je fais un now.setToNow(), cette comparaison renvoie toujours "true".

Et le plus bizarre c'est que now.before(jNow.getSop()) me renvera false. (alors que dans certains cas ça devrait être true).

En fait c'est comme si la comparaison me renvoyait true pour after et false pour before à chaque fois.

Si je laisse mon code comme ça au niveau de la compairaison et remplace le now.setToNow() par now.Hour= etc là ça marche. :rolleyes:

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

Je pense que ton problème vient du fait que android.text.format.Time contient aussi des infos de jour/mois/année.

Quand tu fais setToNow() ca remplit l'heure mais également le jour dans l'année.

ton jNow.getStart() doit lui renvoyer un Time dont les valeurs jour/mois/année sont à 0 donc forcément antérieures à setToNow().

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

C'était effectivement ce que j'étais en train de me dire dans ma tête qu'il devait y avoir des variables non initialisées dans mon time récupéré. (je pensais plus au fuseau horraire à tord, mais effectivement là ça doit bien être la date qui n'est pas initialisé).

Lien vers le commentaire
Partager sur d’autres sites

J'ai un petit problème pour stopper mon programme.

En fait le problème c'est que le programme devient indépendant donc quand je planifie une alarm, je n'ai aucun moyen de la stopper pourquoi?

Pour ça:

AlarmManager am = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
                                   Intent intent2 = new Intent(this, AlarmReceiver.class);
                                   intent2.setData(Uri.parse(""));
                                   PendingIntent pendingintent = PendingIntent.getBroadcast(this, ALARM_ID, intent2, 0);
                                   am.cancel(pendingintent);

Pas de problème me direz vous??? Ben oui mais le problème c'est que l'intent varie chez moi en fonction de si c'est un stop ou un start. Mais que lorsqu'on appuis sur le bouton stop on a aucun moyen de savoir dans quel statu on est pour déprogrammer la prochaine alarme. :/

Bon moi j'ai trouvé the solution je fais:

AlarmManager am = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
                                   Intent intent2 = new Intent(this, AlarmReceiver.class);
                                   intent2.setData(Uri.parse("/start/"));
                                   PendingIntent pendingintent = PendingIntent.getBroadcast(this, ALARM_ID, intent2, 0);
                                   am.cancel(pendingintent);
                                   intent2.setData(Uri.parse("/stop/"));
                                   pendingintent= PendingIntent.getBroadcast(this, ALARM_ID, intent2, 0);
                                   am.cancel(pendingintent);

Mais ça ne me semble pas être la solution, s'il y avait une infinité de cas possible on fait comment pour annuler l'alarme???

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

Et ma comparaison ne marche toujours pas. :(

Si je lance mon service "à l'heure" c'est à dire si je clique sur start pile au moment ou la période activité commence, le service se replanifie à la même heure et ça boucle en continue.

Pourtant dans mon test j'ai mis ça:

if (now.after(jNow.getStart()) || now.equals(jNow.getStart()))

Et il ne rentre pas dans ce if alors que normalement now.equals devrait être à true. :/ Je ne capte pas du tout ces comparaisons quand même. :(

Et je comprends pas les deux sont définis de la même manière, les deux vallent 6h30 mais le test du equals n'est pas égal à true. :'(

EDIT: les jours que je compare:

Mon Jnow.getStart renvoie un time construit de la sorte:

t1=new Time();
t1.hour=Integer.parseInt(line);
t1.minute=Integer.parseInt(line2)

Mon now est construit de la sorte:

Time now=new Time();
//now.setToNow();
now.hour=calendar.get(Calendar.HOUR_OF_DAY);
now.minute=calendar.get(Calendar.MINUTE);

Toast.makeText(this,"Il est : "+ String.valueOf(now.hour)+":"+String.valueOf(now.minute),Toast.LENGTH_SHORT).show();
Toast.makeText(this,"Jnow : "+ String.valueOf(jNow.getStart().hour)+":"+String.valueOf(jNow.getStart().minute),Toast.LENGTH_SHORT).show();

M'affiche bien la même chose soit 6:30

Pourquoi le equals ne marche pas???? :'(

EDIT4: je me rends compte que le now.equals attend un objet alors que les now.before et after c'est un time! On fait comment pour comparer si c'est egal juste d'une manière de Time???

EDIT5: bon j'ai passé outre en me faisant mes propres méthodes de comparaisons mais j'aimerais bien comprendre pourquoi ça marche pas ce foutu truc de time! Je retrouve tous les problèmes et truc illogique (comparé à ma logique) en java que j'avais croisé avant! Une petite explication please? :)

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

Hypothèse 1: un champ qui diffère entre tes deux objets.

Tu peux essayer de les afficher via .format3339() pour voir où est la différence.

Hypothèse 2: les dev Android n'ont pas implémenté la méthode equals, du coup on récupère la version de Object qui ne peut que renvoyer false dès que tu as deux instances différentes.

A la lecture du code source http://android.git.kernel.org/?p=platform/frameworks/base.git;a=blob;f=core/java/android/text/format/Time.java#l31 c'est l'hypothèse 2 qui me semble la bonne. On ne peut donc pas utiliser equals pour comparer deux java.android.text.format.Time, ce qui est tout de même dommage :p

Lien vers le commentaire
Partager sur d’autres sites

Je valide l'hypothèse 2 vu que les champs sont déclarés de la même manière...

Et donc de la sorte ça valide ma non équation envers java. :D

(je trouve ça quand même très mal foutu et souvent à base de bricolage ou de choses illogiques en ma façon de penser :/)

Bon ben merci pour la réponse, je continue mon ptit bonhomme de chemin sur mon programme le service étant ready et fonctionnel, j'attends mon bouquin pour faire l'interface graphique après. :)

EDIT: ça va aller vite pour la partie airfly:

http://developer.android.com/reference/android/telephony/TelephonyManager.html

pour tester le statu et si c'est en cours de sonnerie ou d'appel ben je patiente si c'est configuré comme tel. :D

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

Une petite question, on me rapporte qu'il y avait deux instances de mon programme. (au bout d'une semaine de test du service).

(En gros il voyait deux fois le programme dans le gestionnaire de tache).

Est ce possible???

L'os ne bloque t-il pas théoriquement cette chose là à un lancement maximum par service???

Avez vous une idée de ce qui aurait pu se passer?

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...