2013-03-28 125 views
2

我用下面的代码来设置重复事件AlarmManager如何使用闹钟唤醒设备?

mAlarmManager.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), 
    PERIOD, getPendingIntent(time)); 

代码接收器:

public class NotificationsReceiver extends BroadcastReceiver { 
    public static final String NOTIFICATION_INFO="notification_info"; 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     playSound(context); 
     Intent i=new Intent(context, MainActivity.class); 
     i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
     context.startActivity(i); 
    } 

    private void playSound(Context context) { 
     Uri notification=RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); 
     RingtoneManager.getRingtone(context, notification).play(); 
    } 
} 

有一些问题 - 我需要当事件发生时播放音乐,但如果我的设备在睡觉我没有听到任何信号!但是当我唤醒设备时,我会听到音乐。我该如何解决它?

回答

1

当我不得不这样做,我创建了以下类:

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

public abstract class WakeLocker { 
    private static PowerManager.WakeLock wakeLock; 

    public static void acquire(Context context) { 
     if (wakeLock != null) wakeLock.release(); 

     PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE); 
     wakeLock = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK | 
       PowerManager.ACQUIRE_CAUSES_WAKEUP | 
       PowerManager.ON_AFTER_RELEASE, "WakeLock"); 
     wakeLock.acquire(); 
    } 

    public static void release() { 
     if (wakeLock != null) wakeLock.release(); wakeLock = null; 
    } 
} 

然后就可以调用WakeLocker.acquire(getApplicationContext());来唤醒你的手机,但不要忘记调用WakeLocker.release();当你的动作完成。

此外,添加以下权限到你的清单:<uses-permission android:name="android.permission.WAKE_LOCK" />

希望这有助于。