|
Recherche d'information sur mise en place en JAVA-Android d'un Broadcast Receiver - AlarmManager |
Iniciado por J.P. SILVESTRE, abr., 29 2018 2:02 PM - Sem resposta |
| |
| | | |
|
| |
Membro registado 8 mensagems |
|
Publicado em abril, 29 2018 - 2:02 PM |
Dans un de mes projets je cherche à mettre en place en JAVA un système d'alarmes basé sur AlarmManager ... Mais mes connaissances en JAVA sont assez limitées ... J'ai une erreur au moment de la réception de l'alarme uniquement lorsque l'application Android est fermée. La procédure appelProcedureWL n'est pas retrouvée ! Mes recherches sur internet n'ont pas permis de trouve une solution simple : aucun exemple fonctionnel en Windev Mobile (!) mais une multitude d'exemples en JAVA très souvent incompréhensibles pour un débutant en JAVA. Je suis donc "bloqué" !
Voici quelques éléments que j'ai mis en place :
J'ai ajouté dans le manifeste le receiver ainsi : receiver android:name = cm.shella.alarm.wdgen.GWDCPCOL_AlarmCalendar$AlarmReceiver android:enabled = true android:exported = true
Dans les classes et procédures JAVA, j'ai utilisé (entre autres choses) :
// les imports sont dans la procédure initialisation JAVA et classes diverses
// Déclencher une action quand un alarme est reçue par le BroadCast : public static class AlarmReceiver extends BroadcastReceiver { public static final String ACTION_ALARM = "cm.shella.alarm.ACTION_ALARM"; @Override public void onReceive(Context context, Intent intent) { // lire les infos EXTRA Bundle aInfos = intent.getExtras(); String messageN = aInfos.getString("Numero"); Context aContext = getApplicationContext(); try { // vérifier l'origine de l'appel if (ACTION_ALARM.equals(intent.getAction())) {
// peut appeler la procédure pour ouvrir la fenêtre WINDEV appelProcedureWL("COL_AlarmCalendar.AfficheAlarme",messageN);
// !§!§!§!§!§!§!§!§!§!§!§!§!§!§!§!§!§!§!§!§!§!§!§!§!§!§!§!§!§!§!§!§!§!§ // ERREUR ICI UNIQUEMENT LORSQUE L'APPLICATION EST FERMÉE // JE N'ARRIVE PAS A CORRIGER CETTE ERREUR D'UNE MANIERE SIMPLE // !§!§!§!§!§!§!§!§!§!§!§!§!§!§!§!§!§!§!§!§!§!§!§!§!§!§!§!§!§!§!§!§!§!§
} } catch(Exception e) { // Il y a ce message d'erreur quand l'application est fermée (ou non affichée) !!! // Si l'application est ouverte il n'y a pas d'erreur ...
// pour récupèrer le message d'erreur StringWriter sw = new StringWriter(); PrintWriter pw = new PrintWriter(sw); e.printStackTrace(pw); String UneErreur = sw.toString().toUpperCase(); // pour être enregistrée dans un fichier ... // procedure non mise ici... // Ce message semble dire qu'il ne trouve pas appelProcedureWL
// signale une erreur Context tmpContext = getApplicationContext(); Toast.makeText(tmpContext, "Erreur détectée", Toast.LENGTH_SHORT).show();
// !§!§!§!§!§!§!§!§!§!§!§!§!§!§!§!§!§!§!§!§!§!§!§!§!§!§!§!§!§!§!§!§!§!§!§!§ // JE N'ARRIVE PAS A CORRIGER CETTE ERREUR D'UNE MANIERE SIMPLE // !§!§!§!§!§!§!§!§!§!§!§!§!§!§!§!§!§!§!§!§!§!§!§!§!§!§!§!§!§!§!§!§!§!§!§!§ } } } }
// Enregistrer une alarme : Une autre procédure appelle celle-ci // par exemple EnregistreAlarme(2, 1, 30000, 60000) // 2 = Numéro de l'alarme, 1 = Type de l'alarme, 30000 = Démarre au bout de 30s, 90000 = Se répète toute les minutes
public String _JEnregistreAlarme(int IdAlarme, int UnType, int LeDepart, int UnIntervalle) { Context tmpContext = getApplicationContext(); try { AlarmManager alarm; Calendar cal; PendingIntent aIntent; Activity tmpActivity = getCurrentActivity(); cal = Calendar.getInstance(); alarm = (AlarmManager)tmpContext.getSystemService(tmpContext.ALARM_SERVICE); Intent myIntent = new Intent(tmpContext,AlarmReceiver.class); myIntent.setAction(ACTION_ALARM); // définie dans le Receiver aIntent = PendingIntent.getBroadcast(tmpContext, IdAlarme, myIntent, 0); // passer des infos pour reconnaître l'alarme Bundle aInfos = new Bundle(); aInfos.putString("Numero", String.valueOf(IdAlarme)); myIntent.putExtras(aInfos); aIntent = PendingIntent.getBroadcast(tmpContext, IdAlarme, myIntent, PendingIntent.FLAG_CANCEL_CURRENT); // la ligne suivante change selon le paramètre UnType alarm.setInexactRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + LeDepart, UnIntervalle, aIntent); // chaine renvoyée à Windev pour information à afficher String LeRetour = String.valueOf(IdAlarme); // non utilisé: +" : "+aIntent.toString(); return LeRetour ; } catch(Exception e) { Toast.makeText(tmpContext, "ERREUR dans enregistrement de l'Alarme "+String.valueOf(IdAlarme), Toast.LENGTH_LONG).show(); return "Erreur enregistrement Alarme "+String.valueOf(IdAlarme); } }
Je travaille actuellement en Windev Mobile 21...
J'aimerai bien savoir à quoi est due cette erreur et bien sûr comment la corriger le plus simplement. J'ai bien trouvée une "solution" mais elle me parait vraiment complexe (et je ne suis pas sûr du fonctionnement sur tous les appareils android).
Merci à tous ceux qui ont pu mettre en place un tel système et qui me donneront les informations essentielles que je cherche.
-- J.P. Silvestre ParisMensagem modificada, abril, 29 2018 - 2:04 PM |
| |
| |
| | | |
|
| | | | |
| | |
|