2016-07-13 3 views
1

私はどこからでも自分の質問に対する回答を探しました。 IbroadcastReceiverで複数のアラームを管理する

私は自分のPreferenceActivityでアラームを1つ作成しました。これは簡単な通知を表示するブロードキャスト受信機で機能します。しかし、複数のアラームを設定する場合は、broadcastReceiverに表示する通知を選択する方法がわかりません。

私がセットにアラームを次のコードを使用します。

public void SetAlarm(){ 
    int id1=1, id2=2; 
    //Preferences 
    SharedPreferences prefs = PreferenceManager 
      .getDefaultSharedPreferences(SettingActivity.this); 

    tA = prefs.getString("timePrefA_Key", "Default TimePrefrence"); 
    tB = prefs.getString("timePrefB_Key", "Default TimePrefrence"); 

    //Calendars 
    Calendar cA = Calendar.getInstance(); 
    cA.setTimeInMillis(System.currentTimeMillis()); 
    cA.set(Calendar.HOUR_OF_DAY, TimePreference.getHour(tA)); 
    cA.set(Calendar.MINUTE, TimePreference.getMinute(tA)); 
    cA.set(Calendar.SECOND,0); 

    Calendar cB = Calendar.getInstance(); 
    cB.setTimeInMillis(System.currentTimeMillis()); 
    cB.set(Calendar.HOUR_OF_DAY, TimePreference.getHour(tB)); 
    cB.set(Calendar.MINUTE, TimePreference.getMinute(tB)); 
    cB.set(Calendar.SECOND,0); 


    //Intents 
    Bundle bundle = new Bundle(); 
    AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE); 

    Intent alertIntent = new Intent(this,NotificationReceiver.class); 
     PendingIntent pi1 = PendingIntent.getBroadcast(this, id1, 
       alertIntent, PendingIntent.FLAG_UPDATE_CURRENT); 
    bundle.putInt("NotificationId1", id1); 

    PendingIntent pi2 = PendingIntent.getBroadcast(this, id2, 
      alertIntent, PendingIntent.FLAG_CANCEL_CURRENT); 
    bundle.putInt("NotificationId1", id2); 

    alertIntent.putExtras(bundle); 

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { 
     am.setExact(AlarmManager.RTC_WAKEUP, cA.getTimeInMillis(), pi1); 
     am.setExact(AlarmManager.RTC_WAKEUP, cB.getTimeInMillis(), pi2); 
    } 
    else { 
     am.set(AlarmManager.RTC_WAKEUP, cA.getTimeInMillis(), pi1); 
     am.set(AlarmManager.RTC_WAKEUP, cB.getTimeInMillis(), pi2); 
    }} 

そして、ここでは私のBroadcastReceiverです。私の問題はOnreceiveです。表示する通知を選択するにはどうすればよいですか?

public class NotificationReceiver extends BroadcastReceiver { 
int NotifId1=1, NotifId2=2; 
public void createnotification (Context context,String msg, String msgText, String msgAlert,Class <?> cls, int id){ 
    PendingIntent notifIntent = PendingIntent.getActivity(context,0, 
      new Intent(context,cls),0); 
    NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(context); 
    mBuilder.setSmallIcon(R.drawable.produits); 
    mBuilder.setLargeIcon(BitmapFactory.decodeResource(context.getResources(), R.drawable.produits)); 
    mBuilder.setContentTitle(msg); 
    mBuilder.setTicker(msgAlert); 
    mBuilder.setContentText(msgText); 
    mBuilder.setContentIntent(notifIntent); 
    mBuilder.setDefaults(NotificationCompat.DEFAULT_SOUND); 
    mBuilder.setAutoCancel(true); 
    mBuilder.setVibrate(new long[]{1000, 1000, 1000, 1000, 1000}); 
    mBuilder.setWhen(System.currentTimeMillis()); 
    NotificationManager mNotificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); 
    mNotificationManager.notify(id, mBuilder.build()); 
} 
@Override 
public void onReceive(Context context, Intent intent) { 

    Bundle extra = intent.getExtras(); 
    if(extra != null) { 
     NotifId1 = extra.getInt("NotificationId1"); 
     NotifId2 = extra.getInt("NotificationId2"); 
    } 
    createnotification(context, "Petit déjeuner", "Heure du petit déjeuner", "Veuillez prendre votre petit déjeuner SVP", MainActivity.class,NotifId1); 
    createnotification(context, "Collation", "Heure de collation","Veuillez prendre votre collation SVP", MainActivity.class,NotifId2); 
}} 

答えて

0

このコードは動作しないことができます。

//Intents 
Bundle bundle = new Bundle(); 
AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE); 

Intent alertIntent = new Intent(this,NotificationReceiver.class); 
    PendingIntent pi1 = PendingIntent.getBroadcast(this, id1, 
      alertIntent, PendingIntent.FLAG_UPDATE_CURRENT); 
bundle.putInt("NotificationId1", id1); 

PendingIntent pi2 = PendingIntent.getBroadcast(this, id2, 
     alertIntent, PendingIntent.FLAG_CANCEL_CURRENT); 
bundle.putInt("NotificationId1", id2); 

alertIntent.putExtras(bundle); 

あなたがそれらを必要なときにそれ以外の場合は存在しないだろう、あなたはPendingIntent.getBroadcast()を呼び出す前alertIntentにエキストラを追加する必要があります。

0

おかげでデビッドワッサーあなたが言ったエキストラと このコードは、関数として

//AlarmManager 
    AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE); 
    //Intent1 
    Intent alertIntent1 = new Intent(this,NotificationReceiver.class); 
    alertIntent1.putExtra("NotificationID", 1); 
    PendingIntent pi1 = PendingIntent.getBroadcast(this, 1, alertIntent1, 
      PendingIntent.FLAG_UPDATE_CURRENT); 
    //Set Alarms 
    am.setRepeating(AlarmManager.RTC_WAKEUP, cA.getTimeInMillis(), AlarmManager.INTERVAL_DAY, pi1); 

感謝:)

関連する問題