2010-12-19 15 views
13

Me gustaría desarrollar una aplicación de alarma. La aplicación debe funcionar así:Desarrollar aplicación de alarma

  • lanzamiento que
  • la actividad Muéstrame el tiempo
  • puedo configurar la alarma
  • puedo cerrar la aplicación
  • cuando llega la hora de la alarma, inicia una actividad (incluso si el dispositivo está bloqueado)

He intentado adaptar esta muestra https://github.com/commonsguy/cwac-wakeful pero yo no puede iniciar una actividad cuando llega la hora de la alarma.

I utilizar este código para configurar la alarma (para la prueba he insertado este código en un método de la actividad onCreate):

Intent intent = new Intent(this, OnAlarmReceiver.class); 
PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, intent, 0); 
Calendar cal = Calendar.getInstance(); 
cal.add(Calendar.SECOND, 10); 
AlarmManager alarm = (AlarmManager) getSystemService(Context.ALARM_SERVICE); 
alarm.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, cal.getTimeInMillis(), 
      pendingIntent); 

esta es la clase OnAlarmReceiver:

public class OnAlarmReceiver extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     Log.i(ClockActivity.LOG_TAG, "OnAlarmReceiver::onReceive"); 
     WakefulIntentService.sendWakefulWork(context, AlarmService.class); 
    } 
} 

esto es la clase de servicio:

public class AlarmService extends WakefulIntentService { 

    public AlarmService(String name) { 
     super(name); 
    } 

    @Override 
    protected void doWakefulWork(Intent intent) { 
     Log.i(ClockActivity.LOG_TAG, "AlarmService::doWakefulWork"); 
     Intent newIntent = new Intent(getApplicationContext(), ClockActivity.class); 
     newIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
     newIntent.setAction(ClockActivity.ALARM_ACTION); 
     getApplicationContext().startActivity(newIntent); 
    } 
} 

esta es la porción de Manifest donde se establecen p el servicio y el receptor:

<receiver android:name=".OnAlarmReceiver"></receiver> 
<service android:name=".AlarmService"></service> 

¡Nunca se llama al método doWakefulWork!

+5

publicar su código, preferentemente donde se intenta poner en marcha su actividad, así como informar de cualquier error que su conseguir ... que va a ayudar nosotros te ayudamos – st0le

+0

¿funciona cuando la pantalla está encendida? Solo estoy tratando de averiguar si el problema se relaciona con el bloqueo de activación – Andrew

+0

ya que @PayPal_Tim preguntó en una "respuesta" (en lugar de agregar un comentario aquí) hace 'Log.i (ClockActivity.LOG_TAG," OnAlarmReceiver :: onReceive "); 'ejecutar? –

Respuesta

0

Tuve un problema similar y resolví eliminar el receptor de manifiesto y configurarlo en mi código registrándolo con registerReceiver.

1

mira esto: http://blog.nelsondev.net/?p=124

usando "AlarmManager"

alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, 
    AlarmCal.getTimeInMillis(), AlarmManager.INTERVAL_FIFTEEN_MINUTES, 
    pendingAlarmIntent); 

3

he hecho esta solicitud:

AlarmActivity.java

package com.foo; 
import pack.breceiver.MyBroadcastReceiver; 
import android.app.Activity; 

import android.app.AlarmManager; 
import android.app.PendingIntent; 
import android.content.Intent; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.EditText; 
import android.widget.Toast; 

import android.app.Activity; 
import android.os.Bundle; 

public class AlarmActivity extends Activity { 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
    } 

    public void startAlert(View view) { 
     EditText text = (EditText) findViewById(R.id.time); 
     int i = Integer.parseInt(text.getText().toString()); 
     Intent intent = new Intent(this, MyBroadcastReceiver.class); 
     PendingIntent pendingIntent = PendingIntent.getBroadcast(
       this.getApplicationContext(), 234324243, intent, 0); 
     AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE); 
     alarmManager.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() 
       + (i * 1000), pendingIntent); 
     Toast.makeText(this, "Alarm set in " + i + " seconds", 
       Toast.LENGTH_LONG).show(); 
    } 
} 

MyBroadcastReceiver.java

package pack.breceiver; 

import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.os.Vibrator; 
import android.widget.Toast; 


public class MyBroadcastReceiver extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     Toast.makeText(context, "Don't panik but your time is up!!!!", 
       Toast.LENGTH_LONG).show(); 

     /*// Vibrate the mobile phone 
     Vibrator vibrator = (Vibrator) context.getSystemService(Context.VIBRATOR_SERVICE); 
     vibrator.vibrate(2000); */ 
    } 
} 
0

¿Usted consigue una excepción de instancias, tal vez?

Usted debe tener un constructor público sin arg en su servicio:

public class AlarmService extends WakefulIntentService { 

    public AlarmService() { 
     super("AlarmService"); 
    } 
    // etc 
} 
Cuestiones relacionadas