0

昨天我发现了一些奇怪的东西。在使用本地化版本(不同的应用程序差异包,相同的代码)测试应用程序时,我发现了一个有趣的错误 - 应用程序使用 AlarmManager 和待处理 Intent 设置警报 - 当广播被触发时,只有一个应用程序被激活并执行待处理意图和所有其他应用程序(只有不同​​的语言)根本没有反应。这是安卓bug吗??我期望设置的警报会触发每个拥有自己设置警报但 Android 正在启动的应用程序,或者最后一个活动应用程序是由广播或接收广播触发的?挂起的 Intent 如何与来自系统的广播相关联?系统如何知道哪个应用程序正在等待广播以及这个 .apk 是哪个应用程序?这可能看起来很奇怪或难以理解,但我也很困惑..

public class AlarmSetter  {

    public void SetAlarma(Context context){

    Calendar calendar = Calendar.getInstance();
    calendar.setTimeInMillis(System.currentTimeMillis());
    calendar.set(Calendar.SECOND, 57);
    calendar.set(Calendar.MINUTE, 59);
    calendar.set(Calendar.HOUR_OF_DAY, 23); 
    calendar.add(Calendar.DAY_OF_MONTH, 0);

     Intent intent = new Intent(context, AlarmKicked.class);
     PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 1333333, intent, PendingIntent.FLAG_UPDATE_CURRENT);
     AlarmManager am =(AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
     am.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(),AlarmManager.INTERVAL_DAY,
             pendingIntent);       
    }

}
4

1 回答 1

0

好的,等待确认错误

好的,终于!!!!

这是一个 LVL BUG:所以,该应用程序是 bg.google.myapppackage.apk .. 没有错.. 使用 LVL 许可证 - ServerManagedPolicy - 定制 - bcs google 说开发人员正在使用该示例..

在 ServerManagedPolicy.java 我们有“ private static final String DEFAULT_MAX_RETRIES = "0";" 我刚刚做了“ private static final String DEFAULT_MAX_RETRIES = "10";" 这意味着在锁定之前启动 10 次.. 没什么新鲜的,用户可以在 10 次检查消失之前启动应用程序.. 很好,不是吗?

但!问题出在 LVL 中,每次启动都由系统以非常奇怪的方式注册.. 怎么样?简单地说:每次开始都会在包中添加数字,就像这样

03-17 00:25:45.318: I/PackageManager(59): /data/app/bg.google.myapppackage-1.apk 更改;拆包

03-17 00:25:45.318: I/PackageManager(59): /data/app/bg.google.myapppackage-2.apk 更改;拆包

03-17 00:25:45.318: I/PackageManager(59): /data/app/bg.google.myapppackage-3.apk 更改;拆包

那是应用程序启动的时间......好吧仍然没有错......不!这是错误的!如果您从包 bg.google.myapppackage-1.apk 启动活动,并且此包使用 AlarmManager 设置警报并关闭应用程序,则稍后将触发警报但接收器将不再存在.. bcs 如果用户关闭应用程序并重新启动它然后我们有 bg.google.myapppackage-2.apk 并且第二个包设置警报二,但是当它关​​闭时,包不再存在......系统触发广播但那里没有接收器,应用程序根本没有反应。这就是我的问题..测试应用程序并且从未获得广播或只有活动应用程序注册了广播而其他应用程序没有..

因此,如果您的应用程序正在执行由 AlarmManager 触发的某些更新,则必须设置“私有静态最终字符串 DEFAULT_MAX_RETRIES = “0”;” 为 0 否则在重试期间您的应用程序将显示故障或缺少功能//我认为 Google 必须通过更改包名称来解决此问题,并且必须有人发布 BUG Ticket.. 这件事花了我将近 3 天的时间(白天学习IT,晚上在家工作..所以睡觉是我想念的东西,不想像这样浪费时间..)

03-14 18:22:51.860: D/PackageManager(199): 新包安装在 /data/app/bg.google.myapppackage-1.apk

03-17 00:25:45.348: D/installd(35): DexInv: --- BEGIN '/data/app/bg.google.myapppackage-1.apk' ---

03-17 00:25:47.599: D/installd(35): DexInv: --- END '/data/app/bg.google.myapppackage-1.apk' (成功) ---

03-17 00:25:47.748: I/installd(35): 移动 /data/dalvik-cache/data@app@bg.google.myapppackage-1.apk@classes.dex -> /data/dalvik-cache/ data@app@bg.google.myapppackage-1.apk@classes.dex

于 2013-03-14T07:42:53.943 回答