不会调用多个警报的警报接收器

时间:2016-01-31 20:27:43

标签: android broadcastreceiver android-alarms repeatingalarm android-broadcastreceiver

我正在尝试在不同的特定时间实施重复的多个警报。 问题是在任何给定时间都没有调用警报接收器。

我在活动中的代码:

private void setAlarms() {
    Intent myIntent=new Intent(this, AlarmReceiver.class);
    myIntent.putExtra("MedName",medication_name);
    myIntent.setAction("b5.project.medibro.receivers.AlarmReceiver");
    AlarmManager am = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
    //am.set(AlarmManager.RTC_WAKEUP, time, pendingIntent);
    ArrayList<PendingIntent> intentArray = new ArrayList<PendingIntent>();
    int counter=0;
    for(String timer: timers){
       //timers is an array of Strings in the format hh:mm
         try {
            String[] comps=timer.split(":");
            Calendar cal=Calendar.getInstance();
            cal.set(Calendar.HOUR_OF_DAY, Integer.valueOf(comps[0]));
            cal.set(Calendar.MINUTE, Integer.valueOf(comps[1]));
            cal.set(Calendar.SECOND, 0);
            cal.set(Calendar.MILLISECOND, 0);
            Log.d(TAG,comps[0]+" "+comps[1]+ "Alarm Time: " + cal.getTime().toString());
            PendingIntent pendingIntent = PendingIntent.getService(this, counter, myIntent,0);
            am.setInexactRepeating(AlarmManager.RTC_WAKEUP,
                    cal.getTimeInMillis(),
                    AlarmManager.INTERVAL_DAY,
                    pendingIntent);
            counter++;
        } catch (ParseException e) {
            e.printStackTrace();
            Log.d(TAG,"Time Parsing error: "+e.getMessage());
        }
    }
}

这是我的闹钟接收器:

public class AlarmReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
    if(intent.getAction().equals("b5.project.medibro.receivers.AlarmReceiver")) {
        Toast.makeText(context, "I'm running", Toast.LENGTH_SHORT).show();
        Log.d("Alarm Receiver", "Alarm is invoked. ");

        NotificationCompat.Builder builder = new NotificationCompat.Builder(context);
        builder.setSmallIcon(R.drawable.messenger_bubble_large_blue);
        builder.setContentTitle("Time to take your medicine");
        String medName = intent.getStringExtra("MedName");
        String text = "Medicine name: " + medName;
        builder.setContentText(text);

        Notification notification = builder.build();
        NotificationManagerCompat.from(context).notify(0, notification);
        Toast.makeText(context, "I'm running", Toast.LENGTH_SHORT).show();
    }
}

}

清单声明:(在应用程序标记内)

<receiver android:name="b5.project.medibro.receivers.AlarmReceiver"
        android:enabled="true">
        <intent-filter>
            <action android:name="b5.project.medibro.receivers.AlarmReceiver"/>
        </intent-filter>
    </receiver>

我觉得上面的代码应该至少执行一次广播接收器,但是没有任何东西出现在logcat中。 有人能告诉我我错过了什么吗?

1 个答案:

答案 0 :(得分:0)

而不是getService尝试getBroadcast:

int c = ungetc(fgetc(f), f); // peek one byte
if (c == EOF) {
    ...
}

另请查看http://developer.android.com/reference/android/app/PendingIntent.html#getBroadcast(android.content.Context,int,android.content.Intent,int),并找出所需的标记,因为如果只有最后一个警报(在for循环中)我不会感到惊讶将会工作。