0

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

    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 进行一些网络更新......我将其保存在数据库中。我在活动中有一个 ListAdapter,需要 notifydatasetChanged...为此我需要一个活动实例。

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

4

2 回答 2

2

在您的活动中创建一个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 );
于 2012-06-08T14:54:03.457 回答
0

我得到了答案..为了刷新我可见的活动

        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 ..

于 2012-09-25T12:44:42.390 回答