2010-07-17 10 views
36

Hasta ahora y gracias a este sitio web, he podido configurar una alarma que se configurará y activará, incluso si apago mi teléfono.¿Cómo puedo configurar varias alarmas en Android?

Ahora, puedo configurar una alarma para mostrar un recordatorio para el evento A y necesito la aplicación para configurar otra alarma para mostrar otra recordatorio para el evento B.

debo estar haciendo algo mal, porque solo dispara el recordatorio para el evento A. Parece que una vez configurada, cualquier otra alarma se entiende como la misma. :-(

Aquí está el detalle de lo que estoy haciendo en dos pasos:

1) a partir de una actividad que ajustar una alarma que en cierta fecha y la hora se llame a un receptor

   Intent intent = new Intent(Activity_Reminder.this, 
         AlarmReceiver_SetOnService.class); 

       intent.putExtra("item_name", prescription 
         .getItemName()); 
       intent 
         .putExtra(
           "message", 
           Activity_Reminder.this 
             .getString(R.string.notif_text)); 
       intent.putExtra("item_id", itemId); 
       intent.putExtra("activityToTrigg", 
         "com.companyName.appName.main.Activity_Reminder"); 

       PendingIntent mAlarmSender; 

       mAlarmSender = PendingIntent.getBroadcast(
         Activity_Reminder.this, 0, intent, 0); 

       long alarmTime = dateMgmt.getTimeForAlarm(pickedDate); 
       Calendar c = Calendar.getInstance(); 
       c.setTimeInMillis(alarmTime); 
       // Schedule the alarm! 
       AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE); 
       am.set(AlarmManager.RTC_WAKEUP, alarmTime + 15000, 
         mAlarmSender); 

2) Desde el receptor que llamo un servicio

 Bundle bundle = intent.getExtras(); 
     String itemName = bundle.getString("item_name"); 
     String reminderOrAlarmMessage = bundle.getString("message"); 
     String activityToTrigg = bundle.getString("activityToTrigg"); 
     int itemId = Integer.parseInt(bundle.getString("item_id")); 
     NotificationManager nm = (NotificationManager) context.getSystemService("notification"); 
     CharSequence text = itemName + " "+reminderOrAlarmMessage; 
     Notification notification = new Notification(R.drawable.icon, text, 
       System.currentTimeMillis()); 
     Intent newIntent = new Intent(); 
     newIntent.setAction(activityToTrigg); 
     newIntent.putExtra("item_id", itemId); 
     CharSequence text1= itemName + " "+reminderOrAlarmMessage; 
     CharSequence text2= context.getString(R.string.notif_Go_To_Details); 
     PendingIntent pIntent = PendingIntent.getActivity(context,0, newIntent, 0); 
     notification.setLatestEventInfo(context, text1, text2, pIntent); 
     notification.flags = Notification.FLAG_AUTO_CANCEL; 
     notification.defaults = Notification.DEFAULT_ALL; 
     nm.notify(itemId, notification); 

Gracias de antemano,

monn3t

Respuesta

76

Ok, cuando se programa una PendingIntent, que se supone que asignarle un identificador único a la misma, en caso que usted quiere identificar más tarde (para modificar/cancelarlo)

static PendingIntent getActivity(Context context, int requestCode, Intent intent, int flags) 
//Retrieve a PendingIntent that will start a new activity, like calling Context.startActivity(Intent). 
static PendingIntent getBroadcast(Context context, int requestCode, Intent intent, int flags) 
//Retrieve a PendingIntent that will perform a broadcast, like calling Context.sendBroadcast(). 

El código de solicitud se esa identificación.

En su código, sigue reiniciando el MISMO PendingIntent, en su lugar use un RequestCode diferente cada vez.

PendingIntent pIntent = PendingIntent.getActivity(context,uniqueRQCODE, newIntent, 0); 

Tiene que ser un número entero, i suponga que tiene un primaryid (itemId) que puede identificar de alarma Una alarma de B.

+0

Gracias robó ... lo que usted sugiere hizo el truco. No contesté antes porque quería asegurarse de que estaba funcionando correctamente y es ... Una vez más gracias, monn3t – monn3t

+0

@stOle: Por favor me ayude para éste también: http: // stackoverflow. com/questions/8665021/android-multiple-alarm-not-working/8665978 # 8665978 –

+1

@ st0le: puedo obtener la alarma para una fecha y hora diferentes, pero todos reciben el mismo mensaje. ¿Cómo manejar eso?Quiero configurar el mensaje diferente para alarma diferente. . . –

1

Puede configurar múltiples alarmas mediante el suministro de diferente código de solicitud de pendingIntent.getBroadcast (......)

El enfoque que utilicé para configurar varias alarmas es que creé una sola alarma. Inicialicé un entero estático en la clase de configuración de alarma que se incrementará cada vez desde mi actividad principal cada vez que hago clic en el botón "agregar alarma" en mi actividad principal. P. ej.

MainActivity.java

public class MainActivity extends AppCompatActivity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
} 

public void addAlarmClick(View v) { 
    AlarmActivity.broadcastCode++; 
    startActivity(new Intent(this, AlarmActivity.class)); 
} 
} 

AlarmActivity.java

public class AlarmActivity extends AppCompatActivity {` 
//........ 
public static int broadcastCode=0; 
//........ 
Intent myIntent = new Intent(AlarmActivity.this, AlarmReceiver.class); 
pendingIntent = PendingIntent.getBroadcast(AlarmActivity.this, 
          broadcastCode, myIntent, 0); 
Cuestiones relacionadas