我是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来测试它。然而,它永远不会收到任何广播。
答案 0 :(得分:0)
好的,我发现了问题。
由于这是一个动态壁纸,因此一旦您设置了引擎,就会调用两次引擎,一次用于预览,一次用于实际壁纸。
事件的顺序决定了警报是否有效。事实证明,如果在创建纸张后销毁预览,那么我的所有闹钟都会关闭,因为意图匹配??
AlarmManager alarm = (AlarmManager) mContext.getSystemService(Context.ALARM_SERVICE);
alarm.cancel(mPendingIntent);
所以我所做的不是在预览时注册警报 - 为什么你还需要它们呢?虽然我的新问题是如果我无法禁用预览,最好的解决方法是什么。每篇论文的独特意图?
有趣的是,之所以在发布时才采用这个原因是因为它在测试过程中很少见,我会通过手动设置wallaper过程,所以直到现在还没有拿到它。