2012-06-28 21 views

Respuesta

6

Sí, es cierto. No tiene que agregar ningún servicio especial. Tenga en cuenta que cuando se reinicia el dispositivo, las alarmas que configuró se perderán, por lo que es posible que desee volver a programarlas en el momento del inicio, lo que requiere el permiso android.permission.RECEIVE_BOOT_COMPLETED.

1

Se activa la CPU cada 10 minutos hasta que el teléfono se apaga.

<uses-permission android:name="android.permission.WAKE_LOCK"></uses-permission> 

<receiver android:process=":remote" android:name="Alarm"></receiver> 

Si desea repetir ajuste de la alarma en el arranque de teléfono:

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"></uses-permission> 
... 
<receiver android:name=".AutoStart"> 
    <intent-filter> 
     <action android:name="android.intent.action.BOOT_COMPLETED"></action> 
    </intent-filter> 
</receiver> 

Para más detalles:Alarm Manager Example

+0

si da solución, entonces puede aceptar esto como respuesta – Ponmalar

+0

, en mi opinión, no es una solución (completa), porque no dice qué pasa si no uso ningún permiso – marcin

+0

¿Puede explicar por qué está funcionando? el receptor en un proceso remoto? – MobileMon

0

Añadir a Manifest.xml:

<uses-permission android:name="android.permission.WAKE_LOCK"></uses-permission> 
... 
<receiver android:process=":remote" android:name="Alarm"></receiver> 

código :

package YourPackage; 
    import android.app.AlarmManager; 
    import android.app.PendingIntent; 
    import android.content.BroadcastReceiver; 
    import android.content.Context; 
    import android.content.Intent; 
    import android.os.PowerManager; 

public class Alarm extends BroadcastReceiver 
    {  
     @Override 
     public void onReceive(Context context, Intent intent) 
     { 
      PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE); 
      PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "YOUR TAG"); 
      wl.acquire(); 

      // Put here YOUR code. 
      Toast.makeText(context, "Alarm !!!!!!!!!!", Toast.LENGTH_LONG).show(); // For example 

      wl.release(); 
     } 

    public void SetAlarm(Context context) 
    { 
     AlarmManager am=(AlarmManager)context.getSystemService(Context.ALARM_SERVICE); 
     Intent i = new Intent(context, Alarm.class); 
     PendingIntent pi = PendingIntent.getBroadcast(context, 0, i, 0); 
     am.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), 1000 * 60 * 10, pi); // Millisec * Second * Minute 
    } 

    public void CancelAlarm(Context context) 
    { 
     Intent intent = new Intent(context, Alarm.class); 
     PendingIntent sender = PendingIntent.getBroadcast(context, 0, intent, 0); 
     AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); 
     alarmManager.cancel(sender); 
    } 
    } 

Si desea programar una alarma repitiendo durante el arranque del teléfono:

Añadir permiso para Manifest.xml:

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"></uses-permission> 
    <receiver android:name=".AutoStart"> 
     <intent-filter> 
      <action android:name="android.intent.action.BOOT_COMPLETED"></action> 
     </intent-filter> 
</receiver> 
+0

Acabo de hacer una prueba como código, pero encontré un error: V/onPause: (10099): en pausa V/updateReceiver (10099): actualice las aplicaciones D/AndroidRuntime (10099): cierre VM W/dalvikvm (10099): threadid = 1: el hilo sale con la excepción no detectada (group = 0x4001e578) E/AndroidRuntime (10099): EXCEPCIÓN FATAL: main E/AndroidRuntime (10099): java.lang.RuntimeException: Error al recibir difusión intención {act = com.tcm.alarm.intent.UPDATE flg = 0x40000004 (tiene extras)} en [email protected] E/AndroidRuntime (10099): \t en – tomtu

+0

por qué no pude ingresar Enter a forma el comentario – tomtu

-1

gustaría añadir algunas cosas a lo Cristian Dicha

Incluso si usa el permiso android.permission.RECEIVE_BOOT_COMPLETED, su aplicación se ejecutará correctamente en los dispositivos 2.XX.

Pero en dispositivos 4.x el receptor broadvast no va a funcionar en el arranque hasta que ya menos que inicie la aplicación manualmente

2

No sé por qué no se menciona ningún este permiso

Pero de acuerdo con la documentación androide que, debe usar el permiso SET_ALARM

Documentation

Allows an application to broadcast an Intent to set an alarm for the user.

<uses-permission android:name="com.android.alarm.permission.SET_ALARM"/> 
+9

Esto es para la alarma del reloj, no para el AlarmManager. – Joonazan

Cuestiones relacionadas