屏幕关闭时不会触发BroadcastReceiver - 可能的原因?

时间:2016-01-14 08:47:34

标签: android broadcastreceiver alarmmanager android-pendingintent

尝试找出屏幕关闭时触发我的BroadcastReceiver的原因。 屏幕解锁后,触发“到达”延迟。当屏幕打开时,接收器会及时触发。

Android 4.4.2(Danew Dslide 710)上出现问题,代码在许多其他设备上运行良好

PendingIntent传递给AlarmManager,如下所示:

Context context = getApplicationContext();
Intent intent = new Intent("com.myapp.TEST_ACTION");
intent.putExtra(XTRA_KEY_CONFIG_ID, id);

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN)
    intent.addFlags(Intent.FLAG_RECEIVER_FOREGROUND);

PendingIntent alarmIntent = PendingIntent.getBroadcast(context, reqCode, intent, PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManger am = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
am.setExact(AlarmManager.RTC_WAKEUP, alarmTime, alarmIntent);

我在服务中运行上面的代码,但是使用AlarmManager的应用程序上下文。

清单如下所示:

...
<uses-permission android:name="android.permission.DISABLE_KEYGUARD"/>
<uses-permission android:name="android.permission.WAKE_LOCK" />
...

<receiver android:name=".AlarmTriggerReceiver"
      android:exported="false">
      <intent-filter>
          <action android:name="com.myapp.TEST_ACTION" />
      </intent-filter>
 </receiver>

我的收件人代码:

public class AlarmTriggerReceiver extends BroadcastReceiver
 {
       @Override
        public void onReceive(final Context argCTX, Intent intent)
        {
            // writing a log entry here, but see it delayed at the time 
            // the screen gets unlocked only
            // onReceive gets called in time when device screen is on
        }
    }

由于在调用触发器之前调用Application-class中的代码,我删除了Application类(init google analytics)中的所有代码,以确保它不会因某种原因而挂起。

代码的行为好像我会使用Alarmmanagers“.set”(而不是“.setExact”),所以我认为这个问题可能与电源管理有关。

其他闹钟应用程序,如谷歌的descclock在该设备上运行良好。

非常感谢任何建议和想法!

修改1:

在将PendingIntent设置为AlarmManager后,应用程序活动仍然可见并且屏幕自行锁定(几秒钟后),将及时触发BroadcastReceiver。按 HOME 并使用 POWER 按钮手动锁定屏幕后,会出现上述问题。

0 个答案:

没有答案