当屏幕进入睡眠模式时,PendingIntent AlarmManager不会触发

时间:2014-07-17 16:26:25

标签: android android-broadcast

需要每x秒更新一次视图中的内容,这些X秒取决于计划变化的持续时间。 我正在使用AlarmManager来安排此即将发生的操作并触发Broadcast,然后再次运行更新我的视图的例程,即设备进入时的问题 在睡眠模式下,不会调用下垂动作。

修改

我有ViewPager,每个人都必须更新FragmentList <Object> mList) 每x秒这些x秒取决于变化的计划的持续时间,并且每个Fragment也有自己的时间来更新此列表。

为此,每个Fragment我都有一个类MyReceiverUpdate的实例,并动态记录接收器,因为Fragment是独立的,并且事件不会影响另一个。

我正在使用AlarmManager来安排今后的行动(PendingIntent Broadcast),然后这个广播会执行一个例程来更新我的对象列表,这个问题出现在设备上进入 在睡眠模式下,不执行操作。

//注册待处理操作的方法

public void updateView(long millis){

    final Intent intent = new Intent( ACTION_NAME_UPDATE_VIEW);
    pendingIntent = PendingIntent.getBroadcast( GuideBaseFragment.this.getActivity(), mId, intent, PendingIntent.FLAG_UPDATE_CURRENT );

    final AlarmManager alarmManager = ( AlarmManager ) getActivity().getSystemService( Context.ALARM_SERVICE );
    alarmManager.set( AlarmManager.RTC_WAKEUP, millis, pendingIntentCleanViewNow );
}

我的广播

public class MyReceiverUpdate extends BroadcastReceiver {

    @Override
    public void onReceive( final Context context, final Intent intent ) {

        //need update view

        //Edit
        new UpdateListAsyncTask().executeOnExecutor( AsyncTask.THREAD_POOL_EXECUTOR, ( Void ) null );
    }
}

有人有什么建议吗?

1 个答案:

答案 0 :(得分:0)

不要只是解决我的问题而离开这个问题,并且离开这里被记录为已解决。

对于我正在实施的功能,保持屏幕开启是可以接受的,而这是保持开放的课程,所以我按照文档的Android。

Keeping the Device Awake

这类似于下面的代码,我的广播是动态的,内在于我的活动

public class Activity1 extends Activity {

    public class MyReceiverUpdateSchedules extends WakefulBroadcastReceiver {

        private PowerManager.WakeLock wakeLock;

        public void acquire( final Context ctx ) {

            if ( this.wakeLock != null ) {
                this.wakeLock.release();
            }

            final PowerManager pm = ( PowerManager ) ctx.getSystemService( Context.POWER_SERVICE );
            this.wakeLock = pm.newWakeLock( PowerManager.FULL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP | PowerManager.ON_AFTER_RELEASE, "aqs_wake_lock" );
            this.wakeLock.acquire();
        }

        @Override
        public void onReceive( final Context context, final Intent intent ) {
            this.acquire( context );

            // code going here
        }
    }

    @Override
    protected void onCreate( final Bundle savedInstanceState ) {
        super.onCreate( savedInstanceState );

    }
}