2016-07-31 6 views
0

Ich mache den Benutzer wählen drei Alarme, die ich in der Datenbank einfügen. Der Benutzer muss immer den ersten Alarm eingeben, aber er hat eine Option, ob er den zweiten oder dritten Alarm setzen möchte. Ich kann die Alarme erfolgreich auslösen. Aber ich weiß nicht, wie ich zwischen den Alarmen in meiner AlarmReceiver-Klasse unterscheiden kann. Irgendwelche Vorschläge?So unterscheiden Sie verschiedene Empfangsalarm

Hier habe ich die Daten aus der Datenbank nehme:

@Override 
    protected void onPostExecute(Cursor result) { 
    super.onPostExecute(result); 

    boolean data = result.moveToFirst(); 
    try { 
     while (data) { 
      int timeInMilliSecondsAlarm1Index = result.getColumnIndex("alarm1"); 
      timeInMilliSecondsAlarm1 = result.getInt(timeInMilliSecondsAlarm1Index); 
      if (timeInMilliSecondsAlarm1 > 0) { 
       Alarm1TimeList.add(timeInMilliSecondsAlarm1); 
       countForAlarm++; 
      } 
      int timeInMilliAlarm2Index = result.getColumnIndex("alarm2"); 
      timeInMilliSecondsAlarm2 = result.getInt(timeInMilliAlarm2Index); 
      if(timeInMilliSecondsAlarm2>0) { 
       Alarm2TimeList.add(timeInMilliSecondsAlarm2); 
       countForAlarm++; 
      } 
      int timeInMilliAlarm3Index = result.getColumnIndex("alarm3"); 
      timeInMilliSecondsAlarm3 = result.getInt(timeInMilliAlarm3Index); 
      if(timeInMilliSecondsAlarm3>0) { 
       Alarm3TimeList.add(timeInMilliSecondsAlarm3); 
       countForAlarm++; 
      } 
      count++; 
      data = result.moveToNext(); 
     } 
    }catch (OutOfMemoryError ee) 
    { 
     Log.d("SetMyAlarm","OutOFMemory"); 
    } 
    result.close(); 
    prescriptiondatabaseConnector.close(); 
    startMyAlarm(); 
} 

Hier habe ich meine Warnungen setze dynamisch basierend auf den Daten in der Datenbank:

public void startMyAlarm() { 
     AlarmManager [] alarmMgr = new AlarmManager[countForAlarm]; 
     for (int i = 0; i < countForAlarm; i++) { 
      if (Alarm1TimeList != null) { 
       if (i < Alarm1TimeList.size()) { 
        timeInMilliSecondsAlarm1 = Alarm1TimeList.get(i); 
        if (timeInMilliSecondsAlarm1 > 0) { 
         Intent intent = new Intent(this, AlarmReceiver.class); 
         alarmIntentForAlarm1 = PendingIntent.getBroadcast(this, alarmRequestCodeForAlarm1, intent, 0); 
         alarmMgr[i] = (AlarmManager) getSystemService(Context.ALARM_SERVICE); 
         alarmMgr[i].set(AlarmManager.RTC_WAKEUP, timeInMilliSecondsAlarm1, alarmIntentForAlarm1); 
         alarmRequestCodeListForAlarm1.add(alarmRequestCodeForAlarm1); 
         intentArrayListForAlarm1.add(alarmIntentForAlarm1); 
         alarmRequestCodeForAlarm1++; 
        } 
       } 
      } 
      if (Alarm2TimeList != null) { 
       if (i < Alarm2TimeList.size()) { 
        timeInMilliSecondsAlarm2 = Alarm2TimeList.get(i); 
        if (timeInMilliSecondsAlarm2 > 0) { 
         Intent intent = new Intent(this, AlarmReceiver.class); 
         alarmIntentForAlarm2 = PendingIntent.getBroadcast(this, alarmRequestCodeForAlarm2, intent, 0); 
         alarmMgr[i] = (AlarmManager) getSystemService(Context.ALARM_SERVICE); 
         alarmMgr[i].set(AlarmManager.RTC_WAKEUP, timeInMilliSecondsAlarm2, alarmIntentForAlarm2); 
         alarmRequestCodeListForAlarm2.add(alarmRequestCodeForAlarm2); 
         intentArrayListForAlarm2.add(alarmIntentForAlarm2); 
         alarmRequestCodeForAlarm2++; 
        } 
       } 
      } 
      if (Alarm3TimeList != null) { 
       if (i < Alarm3TimeList.size()) { 
        timeInMilliSecondsAlarm3 = Alarm3TimeList.get(i); 
        if (timeInMilliSecondsAlarm3 > 0) { 
         Intent intent = new Intent(this, AlarmReceiver.class); 
         alarmIntentForAlarm3 = PendingIntent.getBroadcast(this, alarmRequestCodeForAlarm3, intent, 0); 
         alarmMgr[i] = (AlarmManager) getSystemService(Context.ALARM_SERVICE); 
         alarmMgr[i].set(AlarmManager.RTC_WAKEUP, timeInMilliSecondsAlarm3, alarmIntentForAlarm3); 
         alarmRequestCodeListForAlarm3.add(alarmRequestCodeForAlarm3); 
         intentArrayListForAlarm3.add(alarmIntentForAlarm3); 
         alarmRequestCodeForAlarm3++; 
        } 
       } 
      } 
     } 
    } 

Dies funktioniert, aber was ich nicht verstehe, ist, wie ich zwischen den Alarmen unterscheiden werde, die ich in meinem AlarmReceiver feuere.

Ich versuchte dies, aber es hat nicht funktioniert.

public class AlarmReceiver extends BroadcastReceiver{ 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     for(int i = 0; i < SetMyAlarm.intentArrayListForAlarm1.size(); i++) 
     { 
      if(intent.equals(SetMyAlarm.intentArrayListForAlarm1.get(i))) 
      { 
       Toast.makeText(context,"I was fired but i came back",Toast.LENGTH_SHORT).show(); 
      } 
     } 
    } 
} 

Das funktioniert aber

public class AlarmReceiver extends BroadcastReceiver{ 
    @Override 
    public void onReceive(Context context, Intent intent) { 
       Toast.makeText(context,"I was fired but i came back",Toast.LENGTH_SHORT).show(); 

} 

} 
+0

Nur ein zusätzliches Feld in Ihrem Intent hinzuzufügen, die Ihre Kennung wären. – jonDoe

Antwort

0

Das funktioniert nicht, weil equals kann nicht auf diese Weise für Absichten arbeiten.

intent.putExtra("code", 1); 

Und dann in der Sendung: Eine einfache Lösung kann in einem Wert, der die intent zu Ihrem PendingIntent passiert seine

public class AlarmReceiver extends BroadcastReceiver{ 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     switch(intent.getIntExtra("code", -1)) { 
       // Your stuff 
     } 
    } 
} 
Verwandte Themen