2016-04-13 5 views
0

私は時刻表2カレンダーショー1通知

をユーザに思い出させる上でのアプリの仕事を持っている私は、通知して、新しいクラスにカレンダーを入れて、メインの活動に移動し、それを呼びました。

しかし、最初の方法では通知が表示されていましたが、2番目の方法ではなぜそれが表示されませんでしたか?

MainActivity.java

 package com.osman.calendar; 

    import android.os.Bundle; 
import android.support.v7.app.AppCompatActivity; 

import com.pushbots.push.Pushbots; 

    public class MainActivity extends AppCompatActivity { 


     @Override 
     protected void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.activity_main); 
      Pushbots.sharedInstance().init(this); 

      new section(this,1, 18, 30,"Title","new message","new message"); 
      new section(this,2, 18, 37,"Title","get new","get new"); 

     } 
    } 

section.java

package com.osman.calendar; 

import android.app.AlarmManager; 
import android.app.PendingIntent; 
import android.content.Context; 
import android.content.Intent; 

import java.util.Calendar; 

public class section { 

    public section(Context context,int id,int Hours,int Minute, String Tilte , String Text, String Alert){ 
     AlarmManager alarmMgr = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE); 
     Intent intent = new Intent(context, AlarmReceiver.class); 
     intent.putExtra("id",id); 
     intent.putExtra("Title",Tilte); 
     intent.putExtra("Text",Text); 
     intent.putExtra("Alert",Alert); 
     PendingIntent alarmIntent = PendingIntent.getBroadcast(context.getApplicationContext(), 0, intent, 0); 

     Calendar calendar = Calendar.getInstance(); 
     calendar.setTimeInMillis(System.currentTimeMillis()); 
     calendar.set(Calendar.HOUR_OF_DAY, Hours); 
     calendar.set(Calendar.MINUTE, Minute); 

     alarmMgr.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), 
       1000 * 60 * 60 * 24 * 7, alarmIntent); 


    } 
} 

AlarmReceiver.java

 package com.osman.calendar; 

    import android.app.NotificationManager; 
    import android.app.PendingIntent; 
    import android.content.BroadcastReceiver; 
    import android.content.Context; 
    import android.content.Intent; 
    import android.os.Vibrator; 
    import android.support.v4.app.NotificationCompat; 
    import android.widget.Toast; 


    public class AlarmReceiver extends BroadcastReceiver { 
     @Override 
     public void onReceive(Context context, Intent intent) { 
      Toast.makeText(context, "Time is up!!!!.",Toast.LENGTH_LONG).show(); 
      String Title = intent.getExtras().getString("Title"); 
      String Text = intent.getExtras().getString("Text"); 
      String Alert = intent.getExtras().getString("Alert"); 
      int id = intent.getExtras().getInt("id"); 
      createNotification(context, Title, Text, Alert,id); 
      // Vibrate the mobile phone 
      Vibrator vibrator = (Vibrator) context.getSystemService(Context.VIBRATOR_SERVICE); 
      vibrator.vibrate(2000); 
     } 

     public void createNotification (Context context, String msg,String msgText, String msgAlert,int id){ 

      PendingIntent notificIntent = PendingIntent.getActivity(context, 0, new Intent(context, MainActivity.class), 0); 
      NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(context) 
        .setSmallIcon(R.mipmap.ic_launcher) 
        .setContentTitle(msg) 
        .setContentText(msgText) 
        .setTicker(msgAlert); 
      mBuilder.setContentIntent(notificIntent); 
      mBuilder.setDefaults(NotificationCompat.DEFAULT_SOUND); 
      mBuilder.setAutoCancel(true); 
      NotificationManager mNotificationMAnger =(NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); 
      mNotificationMAnger.notify(id, mBuilder.build()); 
     } 

    } 

答えて

0

あなたは、以前と同じPendingIntentで設定したアラームをアラームをスケジュールする場合以前は更新されていて、新しいものは設定されていません。 PendingIntentが2回目に使用されたときに変更されなかったため、1つのアラームだけが起動します(this質問の回答によると、これは変更とはみなされません)。

古いアラームを更新せずに新しいアラームを設定するには、別のリクエストコード(getBroadcast()の2番目のパラメータ - 両方のアラームに現在0を使用しています)を使用する必要があります。 section-constructorのパラメータとして既に持っているidをrequest-codeとして使用してください。

関連する問題