Note that there are some explanatory texts on larger screens.

plurals
  1. POAndroid AlarmReceiver and BootReceiver
    primarykey
    data
    text
    <p>In my application, I create alarms. So, when the phone is rebooted, I need to create again the alarms.</p> <p>But when I reboot the phone (emulator) and that alarms must be created, there is a Force Close. It says : </p> <pre><code>Unable to instantiate receiver com.yannv.vehiclesmanager.AlarmReceiver: java.lang.ClassNotFoundException: com.yannv.vehiclesmanager.AlarmReceiver in loader dalvik.system.PathClassLoader[/data/app/com..etc] </code></pre> <p>Here is the concerned part of my manifest (don't know if problem comes from there..)</p> <pre><code> &lt;receiver android:name="AlarmReceiver"&gt; &lt;intent-filter&gt; &lt;action android:name="afficherNotification" /&gt; &lt;data android:scheme="rappel" /&gt; &lt;/intent-filter&gt; &lt;/receiver&gt; &lt;receiver android:name="com.yannv.vehiclesmanager.BootReceiver"&gt; &lt;intent-filter&gt; &lt;action android:name="android.intent.action.BOOT_COMPLETED" /&gt; &lt;/intent-filter&gt; &lt;/receiver&gt; &lt;/application&gt; &lt;uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /&gt; </code></pre> <p></p> <p>Thanks for your help</p> <p>BootReceiver Class :</p> <pre><code>package com.yannv.vehiclesmanager; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import android.app.AlarmManager; import android.app.PendingIntent; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.database.Cursor; public class BootReceiver extends BroadcastReceiver{ /*Lorsqu'on éteint le téléphone, les alarmes sont supprimées. Cette méthode est appelée au démarrage du téléphone et sert à recréer les alarmes*/ public void onReceive(Context context, Intent in) { final int NOT_AUCUN = 0; //ID des possibilités de notification final int NOT_AU_DEBUT = 1; final int NOT_10_MINUTES = 2; final int NOT_30_MINUTES = 3; final int NOT_1_HEURE = 4; final int NOT_2_HEURES = 5; final int NOT_3_HEURES = 6; final int NOT_12_HEURES = 7; final int NOT_24_HEURES = 8; final int NOT_2_JOURS = 9; final int NOT_1_SEMAINE = 10; final int ID_COLUMN_ID = 0; final int ID_COLUMN_DATE = 2; final int ID_COLUMN_HEURE = 4; final int ID_COLUMN_NOTIF = 7; int heures; int minutes; int annee; int mois; int jour; Intent intent = new Intent(context, AlarmReceiver.class); Date dateRappel = null; Date dateNotif; final SimpleDateFormat dateFormatDB = new SimpleDateFormat ("yyyy'.'MM'.'dd"); DBAdapter db; AlarmManager am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); db = new DBAdapter(context); db.open(); Cursor c = db.recupListeRappelAVenir(); c.moveToFirst(); for(int i=0;i&lt;c.getCount();i++){ try { dateRappel = dateFormatDB.parse(c.getString(ID_COLUMN_DATE).toString()); } catch (ParseException e) { e.printStackTrace(); } String[] heureRappel = c.getString(ID_COLUMN_HEURE).toString().split(":"); heures = (int) Integer.parseInt(heureRappel[0]); minutes = (int) Integer.parseInt(heureRappel[1]); annee = dateRappel.getYear(); mois = dateRappel.getMonth(); jour = dateRappel.getDay(); dateNotif = null; dateNotif = new Date (annee, mois, jour, heures, minutes); PendingIntent sender = PendingIntent.getBroadcast(context, c.getInt(ID_COLUMN_ID), intent, 0); switch(c.getInt(ID_COLUMN_NOTIF)){ case NOT_AUCUN : //Pas de notification dateNotif = null; break; case NOT_AU_DEBUT : //On ne fait rien break; case NOT_10_MINUTES : dateNotif.setTime(dateNotif.getTime()- 600000); break; case NOT_30_MINUTES : dateNotif.setTime(dateNotif.getTime()- 1800000); break; case NOT_1_HEURE : dateNotif.setTime(dateNotif.getTime()- 3600000); break; case NOT_2_HEURES : dateNotif.setTime(dateNotif.getTime()- 7200000); break; case NOT_3_HEURES : dateNotif.setTime(dateNotif.getTime()- 10800000); break; case NOT_12_HEURES : dateNotif.setTime(dateNotif.getTime()- 43200000); break; case NOT_24_HEURES : dateNotif.setTime(dateNotif.getTime()- 86400000); break; case NOT_2_JOURS : dateNotif.setTime(dateNotif.getTime() - 172800000); break; case NOT_1_SEMAINE : dateNotif.setTime(dateNotif.getTime() - 604800000); break; } if (dateNotif != null){ am.set(AlarmManager.RTC_WAKEUP, dateNotif.getTime(), sender); } c.moveToNext(); } c.close(); db.close(); } </code></pre> <p>}</p> <p>AlarmReceiver Class </p> <pre><code>package com.yannv.vehiclesmanager; import android.app.Notification; import android.app.NotificationManager; import android.app.PendingIntent; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.util.Log; import android.widget.Toast; public class AlarmReceiver extends BroadcastReceiver{ @Override public void onReceive(Context context, Intent intent) { try { //Création de la notification NotificationManager nm = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); int icon = R.drawable.icon; CharSequence tickerText = "Notification de Vehicles Manager"; long when = System.currentTimeMillis(); CharSequence contentTitle = "Vehicles Manager : rappel !"; CharSequence contentText = "Pressez pour voir la liste des rappels"; Intent notificationIntent = new Intent(context, Rappel.class); PendingIntent contentIntent = PendingIntent.getActivity(context, 0, notificationIntent, 0); Notification notification = new Notification(icon, tickerText, when); notification.setLatestEventInfo(context, contentTitle, contentText, contentIntent); notification.defaults |= Notification.DEFAULT_SOUND; notification.defaults |= Notification.DEFAULT_VIBRATE; notification.flags = Notification.FLAG_AUTO_CANCEL; nm.notify(0, notification); } catch (Exception exception) { Toast.makeText(context, "Vehicle's Manager : erreur lors du lancement d'une notification", Toast.LENGTH_LONG).show(); Log.e("ALARM_RECEIVER", exception.toString()); } } </code></pre> <p>}</p> <p><strong>EDIT : Problem solved</strong>. It seems that all my problems came from this line of the BootReceiver class:</p> <pre><code>jour = dateRappel.getDay(); </code></pre> <p>I replace it by </p> <pre><code>jour = dateRappel.getDate(); </code></pre> <p>And it works.</p>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload