Android Alarm在Release中无效

时间:2012-08-22 06:19:51

标签: android android-intent broadcastreceiver alarmmanager android-alarms

我是Android的新手,这是我的第一款应用。

我创建了我的应用程序,一切正常,警报触发器。在我创建签名版本并安装我的警报后不起作用:(。

这是我的闹钟,注册接收器:

public void enable(){
    if(enabled == true) return;
    IntentFilter filter = new IntentFilter();
    filter.addAction(INTENT);
    mContext.registerReceiver(this, filter);
    enabled = true;
}

然后设置闹钟:

private void setAlarm(Long interval){
    Intent startIntent = new Intent(INTENT);
    mPendingIntent = PendingIntent.getBroadcast(context, 0, startIntent, 0);
    AlarmManager alarm = (AlarmManager) mContext.getSystemService(Context.ALARM_SERVICE);
    alarm.setInexactRepeating(AlarmManager.ELAPSED_REALTIME, SystemClock.elapsedRealtime() + 60000, 60000, mPendingIntent);
}

最初我调用enable,然后调用setAlarm。

在非发行版中一切正常。我没有把接收器放在我的清单中,因为我正在手动注册。正在调用设置的警报方法,我知道这是肯定的,因为我做了一个toast来测试它。然而,它永远不会收到任何广播。

1 个答案:

答案 0 :(得分:0)

好的,我发现了问题。

由于这是一个动态壁纸,因此一旦您设置了引擎,就会调用两次引擎,一次用于预览,一次用于实际壁纸。

事件的顺序决定了警报是否有效。事实证明,如果在创建纸张后销毁预览,那么我的所有闹钟都会关闭,因为意图匹配??

AlarmManager alarm = (AlarmManager) mContext.getSystemService(Context.ALARM_SERVICE);
alarm.cancel(mPendingIntent);

所以我所做的不是在预览时注册警报 - 为什么你还需要它们呢?虽然我的新问题是如果我无法禁用预览,最好的解决方法是什么。每篇论文的独特意图?

有趣的是,之所以在发布时才采用这个原因是因为它在测试过程中很少见,我会通过手动设置wallaper过程,所以直到现在还没有拿到它。