从清单中注册的广播接收器更新 UI



我遇到了这个问题,我正在清单中为AlarmManager注册我的广播接收器。我正在通过挂起的意图在我的活动中安排它。

    AlarmManager alarmMgr = (AlarmManager) this.getSystemService(Context.ALARM_SERVICE);
    PendingIntent pendingIntent =PendingIntent.getBroadcast(this, 0, new Intent(this, AlarmReciever.class),PendingIntent.FLAG_CANCEL_CURRENT);
    alarmMgr.setInexactRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, Constants.ALARM_TRIGGER_AT_TIME,Constants.ALARM_INTERVAL, pendingIntent);

但是在我的接收器类中,我正在使用 AlarmManager 进行一些网络更新......我正在保存在数据库中。我在活动中有一个列表适配器,需要通知数据集已更改...为此,我需要我的活动实例。

如何获得它?基本上,我想至少在我的应用程序可见时更新我的 UI。

在您的

活动中创建一个BroadcastReceiver,在活动onResume中注册它,然后在 onPause 中取消注册。完成后 网络更新 ,创建一个Intent,输入要发送到活动的所有数据并触发它。如果您的活动位于前台,则只有它会收到此意图。从活动中onReceive() BroadcaseReceiver,您可以获取所有数据,然后更新 UI。

在您的活动中创建一个BroadcastReceiver ::

 private class MyReceiver extends BroadcastReceiver
{
        @Override
        public void onReceive(Context context, Intent intent) {
             /////// update your UI from here ////////     
            }
}

onCreate() 中,创建此接收器的实例 ::

myReceiver=new MyReceiver();

OnResume()注册此接收器 ::

    IntentFilter filter=new IntentFilter();
    filter.setPriority(1);
    filter.addAction( "MyPackageName.MyAction" );
    registerReceiver(myReceiver, filter);

onPause()中取消注册 ::

unregisterReceiver( myReceiver );

现在,在完成网络更新后触发一个意图来启动此接收器::

            Intent broadcastIntent=new Intent();
            broadcastIntent.setAction( "MyPackageName.MyAction" );
            broadcastIntent.putExtra();// put data to send to your activity
            sendBroadcast( broadcastIntent );

我得到了答案。用于刷新可见的活动

        Intent i=new Intent(caller,Dot.class);
        i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
        i.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
        caller.startActivity(i);

如果活动可见,它将在代码中调用 OnNewIntent(),从而调用 onResume(),您可以在其中更新您的 UI。

最新更新