2011-11-30 11 views
27

En mi aplicación, estoy tratando de iniciar un servicio usando el administrador de alarmas. Cuando estoy haciendo clic en un botón, el servicio debe comenzar en un momento particular que estoy dando. Mi código para el Administrador de alarma se da a continuación:¿Cómo iniciar el servicio usando Alarm Manager en Android?

public void onClick(View view) 
{ 
    if(view == m_btnActivate) 
    { 
     Calendar cur_cal = Calendar.getInstance(); 
     cur_cal.setTimeInMillis(System.currentTimeMillis()); 
     cur_cal.add(Calendar.SECOND, 50); 
     Log.d("Testing", "Calender Set time:"+cur_cal.getTime()); 
     Intent intent = new Intent(DashboardScreen.this, ServiceClass.class); 
     Log.d("Testing", "Intent created"); 
     PendingIntent pi = PendingIntent.getService(DashboardScreen.this, 0, intent, 0); 
     AlarmManager alarm_manager = (AlarmManager)getSystemService(Context.ALARM_SERVICE); 
     alarm_manager.set(AlarmManager.RTC, cur_cal.getTimeInMillis(), pi); 
     Log.d("Testing", "alarm manager set"); 
     Toast.makeText(this, "ServiceClass.onCreate()", Toast.LENGTH_LONG).show(); 
    } 
} 

Y abajo es mi clase de servicio:

public class ServiceClass extends Service{ 

    @Override 
    public void onCreate() { 
     // TODO Auto-generated method stub 
     super.onCreate(); 
     Log.d("Testing", "Service got created"); 
     Toast.makeText(this, "ServiceClass.onCreate()", Toast.LENGTH_LONG).show(); 
    } 

    @Override 
    public IBinder onBind(Intent arg0) { 
     // TODO Auto-generated method stub 
     return null; 
    } 

    @Override 
    public void onDestroy() { 
     // TODO Auto-generated method stub 
     super.onDestroy(); 
    } 

    @Override 
    public void onStart(Intent intent, int startId) { 
     // TODO Auto-generated method stub 
     super.onStart(intent, startId); 
     Toast.makeText(this, "ServiceClass.onStart()", Toast.LENGTH_LONG).show(); 
     Log.d("Testing", "Service got started"); 
    } 

} 

Si el servicio se iniciará debe imprimir los mensajes de registro en la clase de servicio. Pero no está mostrando. ¿Alguien puede ayudar?

+0

Mencioné el nombre, pero no Android: enabled = "true" –

+1

Use alarmManager.cancel (pintent); para cancelar el administrador de alarmas – user370305

+1

'Android: habilitado' de forma predeterminada es 'verdadero' – Tautvydas

Respuesta

72

Esto es lo que he utilizado, para iniciar el servicio después de 30 segundos de la hora actual,

Intent intent = new Intent(DashboardScreen.this, ServiceClass.class); 
PendingIntent pintent = PendingIntent.getService(DashboardScreen.this, 0, intent, 0); 
AlarmManager alarm = (AlarmManager)getSystemService(Context.ALARM_SERVICE); 
alarm.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), 30*1000, pintent); 

Inténtelo, y quiero saber lo que sucede ...

EDIT:

En su archivo manifest.xml

<service android:enabled="true" android:name=".ServiceClass" /> 
+1

Sí, está funcionando ... gracias ... pero ahora ¿cómo puedo detener el servicio en un momento determinado? –

+1

¿me pueden ayudar con la pregunta anterior? ¿Cómo puedo detener el administrador de alarmas en un momento determinado? –

+0

Usar alarmManager.cancel (pintent); para detener al administrador de alarmas – user370305

12

Sé que esta es una pregunta antigua, pero solo para ayudar a la gente le de Google, así es cómo puede mantener vivo su servicio.

Intent ishintent = new Intent(this, HeartBeat.class); 
    PendingIntent pintent = PendingIntent.getService(this, 0, ishintent, 0); 
    AlarmManager alarm = (AlarmManager)getSystemService(Context.ALARM_SERVICE); 
    alarm.cancel(pintent); 
    alarm.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(),5000, pintent); 

El servicio se cancela y se reinicia cada 5 segundos.

+0

Se forzará el valor hasta 60000ms para Android 5, no confíe ... tiene que esperar 1mins luego. gracias de cualquier manera – thanhbinh84

Cuestiones relacionadas