我有一个应用程序,它使用它AlarmManager来定时唤醒整个小时的电话,并发送消息到Android Wear手表,这是一个短暂的振动.我有两个用户使用三星Galaxy S6和Android 5.1.1,索尼SW 3和5.1.1有一个奇怪的错误.在第一个整小时,振动处于准确的时间,但所有其他振动都延迟了3分钟.有时即使是第一个整小时的振动也会延迟.
这是一些代码:
final Calendar time = Calendar.getInstance();
time.set(Calendar.SECOND, 0);
time.set(Calendar.MILLISECOND, 0);
time.set(Calendar.MINUTE, 0);
time.set(Calendar.HOUR_OF_DAY, time.get(Calendar.HOUR_OF_DAY) + 1);
final Intent hourlyChimeIntent = new Intent(context, HourlyChimeReceiver.class);
hourlyChimeIntent.setAction(key);
final AlarmManager am = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
final PendingIntent pi = PendingIntent.getBroadcast(context, 0, hourlyChimeIntent, PendingIntent.FLAG_CANCEL_CURRENT);
am.setExact(AlarmManager.RTC_WAKEUP, time.getTimeInMillis(), pi);
Run Code Online (Sandbox Code Playgroud)
我WakeLock在接收器中获取了一个,然后在一个线程中向Wear手表发送消息.没有振动,他们只是迟到3分钟.
我没有关于这个问题的其他报告,我的所有测试设备都运行良好.我没有三星设备.
什么可能导致3分钟延迟的想法?三星是否会忽略setExact并使我的警报不准确?如何强制三星的确切警报?
编辑:
这是Android Wear特定代码.在接收者的onReceive方法中我这样做:
final PowerManager mgr = (PowerManager)context.getSystemService(Context.POWER_SERVICE);
final PowerManager.WakeLock lock = mgr.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, BuildConfig.APPLICATION_ID);
lock.acquire(7L * 1000L);
final GoogleApiClient googleApiClient = new GoogleApiClient.Builder(context).addApi(Wearable.API).build();
new …Run Code Online (Sandbox Code Playgroud)