0

マニフェストで 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 を使用していくつかのネットワーク更新を行っています...これをデータベースに保存しています。アクティビティに 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()が呼び出され、UIを更新できるonResume()が呼び出されます。

于 2012-09-25T12:44:42.390 に答える