2010-08-13 5 views
7

J'ai un problème. J'essaie de faire un récepteur de diffusion acquérir un verrouillage de réveil afin que mon alarme réveille le téléphone du mode veille.Problème lors de l'acquisition du verrouillage de réveil à partir du récepteur de diffusion

Dans le récepteur de diffusion ci-dessous, le programme se bloque avec « source introuvable » en ligne « sCpuWakeLock.acquire(), quand la classe « AlarmAlertWakeLock » est appelé par AlarmReceiver Toute idée de ce qui se passe est-il une meilleure.? façon de faire ce que je suis en train de faire

Dans un fichier:

import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 

public class AlarmReceiver extends BroadcastReceiver { 
    @Override 
    public void onReceive(final Context context, Intent intent) { 
     AlarmAlertWakeLock.acquireCpuWakeLock(context); 

    }  
} 

Dans un fichier séparé:

import android.content.Context; 
import android.os.PowerManager; 

public class AlarmAlertWakeLock { 

    private static PowerManager.WakeLock sCpuWakeLock; 

    static void acquireCpuWakeLock(Context context) { 

     if (sCpuWakeLock != null) { 
      return; 
     } 
     PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE); 


     sCpuWakeLock = pm.newWakeLock(
       PowerManager.PARTIAL_WAKE_LOCK | 
       PowerManager.ACQUIRE_CAUSES_WAKEUP,"okTag"); 
     sCpuWakeLock.acquire(); 
    } 

    static void releaseCpuLock() { 
     if (sCpuWakeLock != null) { 
      sCpuWakeLock.release(); 
      sCpuWakeLock = null; 
     } 
    } 
} 

Répondre

4

Peu importe, j'ai tout compris - je besoin d'ajouter l'autorisation de verrouillage de réveil au manifeste:

utilise-permission android: name = "android.permission.WAKE_LOCK"

fonctionne très bien maintenant!

Questions connexes