flx*_*pps 13 android broadcastreceiver alarmmanager wakelock
所以我有一个BroadcastReceiver和AlarmManager.
假设我像这样创建Pending Intents:
Intent i;
i = new Intent(context, MyReceiver.class);
i.setAction(MyReceiver.ACTION_1);
i.addFlags(Intent.FLAG_RECEIVER_FOREGROUND);
pendingIntent1 = PendingIntent.getBroadcast(context, 1, i, PendingIntent.FLAG_UPDATE_CURRENT);
i = new Intent(context, MyReceiver.class);
i.setAction(MyReceiver.ACTION_2);
i.addFlags(Intent.FLAG_RECEIVER_FOREGROUND);
pendingIntent2 = PendingIntent.getBroadcast(context, 2, i, PendingIntent.FLAG_UPDATE_CURRENT);
Run Code Online (Sandbox Code Playgroud)
并按如下方式安排警报:
now = SystemClock.elapsedRealtime();
long time1 = now + 10 * 1000;
long time2 = time1 + 60 * 1000;
am.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, time1, pendingIntent1);
am.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, time2, pendingIntent2);
Run Code Online (Sandbox Code Playgroud)
我现在正在体验我的广播接收器ACTION_1非常可靠地获得广播,而ACTION_2通常没有被传送.所以onReceive很少或永远不会执行持有该动作的意图ACTION_2.怎么回事?我想,*_WAKEUP确保无论如何都要播放广播?
[2015年9月15日更新] - 出于测试目的,我正在尝试在我的onReceive方法中打印出一条日志消息.还是行不通. - 我现在尝试在AlarmManager上使用setExact.还是行不通.- 我甚至尝试过使用过WakefulBroadcastReceiver.还是行不通. - 但我发现,当处于电池充电状态时,设备可靠地唤醒.
什么可能导致这个问题?我已经到处读到,如果警报管理员通过未决意图触发广播接收器(并且没有做太多的事情onReceive),保证会执行广播接收器.我可能在我的手机上有一些积极的节能政策,我无法真正反对(没有获得长唤醒锁定,请参阅评论)?
[2015年9月19日更新]我刚刚在Google Play上测试了一些闹钟应用(https://play.google.com/store/apps/details?id=com.alarmclock.xtreme.free)可靠地唤醒手机.我猜,这真的是一个错误而不是我的错.我想,我会坚持使用唤醒锁定解决方案.
小智 6
我遇到了同样的问题,我发现的解决方案是仅通过操作字符串创建意图,并在清单中注册该接收器操作.尝试将意图更改为以下内容:
i = new Intent("com.app.ACTION_ONE");
Run Code Online (Sandbox Code Playgroud)
然后在您的清单文件中添加以下内容:
<intent-filter>
<action android:name="com.app.ACTION_ONE" />
</intent-filter>
Run Code Online (Sandbox Code Playgroud)
我的猜测是,如果你没有向接收者注册至少1个动作,他就会在应用程序终止时终止.
希望它有效,祝你好运.
| 归档时间: |
|
| 查看次数: |
2295 次 |
| 最近记录: |