首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AlarmManager vs唤醒

AlarmManager vs唤醒
EN

Stack Overflow用户
提问于 2012-01-14 07:28:54
回答 1查看 6.6K关注 0票数 2

这是我的代码:

活动:

代码语言:javascript
复制
@Override
public void onCreate(Bundle savedInstanceState) {

...

Intent intent = new Intent(this, MyReceiver.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(
    this.getApplicationContext(), 234324243, intent, PendingIntent.FLAG_UPDATE_CURRENT);

AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);

alarmManager.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis()
    + (5 * 1000), pendingIntent);

...
} 

BroadcastReceiver:

代码语言:javascript
复制
public class MyReceiver extends BroadcastReceiver {

@Override
public void onReceive(Context context, Intent intent) {
    Intent service = new Intent(context, StartNotificationService.class);

    context.startService(service);
}

服务:

代码语言:javascript
复制
public class StartNotificationService extends Service {

@Override
public void onStart(Intent intent, int startId) {
    super.onStart(intent, startId);

    this.intent = intent;
    showNotification();
}

private void showNotification() {
    Date date = new Date(pror.getFirstMillis());

    Log.i("date", date.toString());

    Timer timer = new Timer();
    TimerTask timerTask = new TimerTask() {
        @Override
        public void run() {
            createNotification(contentTitle, contentText, tickerText);

            pror.calculateVak();
            pror.setFirstMillis(pror.getNextVak());

            createStatusBarNotification(contentTitle, contentText, tickerText);
        }
    };
    timer.schedule(timerTask, date);
}

}

AndroidManifest

代码语言:javascript
复制
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<application
     android:icon="@drawable/icon"
    android:label="@string/app_name" >
    <activity android:name=".ShowSettingsActivity" />

    <receiver android:name=".MyReceiver"/> 
    <service android:name=".service.StartNotificationService"/>

    <activity android:name=".PreferencesActivity" android:label="@string/app_name">
   </activity>
    <activity
        android:label="@string/app_name"
        android:name=".VakActivity" >
        <intent-filter >
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>

当手机进入睡眠状态时,alarmManager无法启动通知/服务。

如果我离开我的手机在‘活动’-解锁状态,在特定的时间触发通知。

我哪里搞错了?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-01-14 08:08:58

有两种方法可以解决这个问题。

  1. 如果您要做的只是创建状态栏通知,则只需在BroadcastReceiver
  2. If中执行此操作您需要在创建通知之前运行您的服务,并且您需要在设备休眠时执行此操作,您需要获取WAKE_LOCK

因此,对于类主体中所需服务的approach 2

代码语言:javascript
复制
PowerManager pm;
PowerManager.WakeLock wl;

然后在你的onCreate中,你需要:

代码语言:javascript
复制
pm = (PowerManager)getSystemService(Context.POWER_SERVICE);
wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "My Tag");
wl.acquire();

然后在你的onDestroy中你需要放入:

代码语言:javascript
复制
wl.release();

我从PowerManager得到的所有信息

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8858640

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档