通知后刷新服务活动

时间:2014-08-08 14:28:29

标签: java android android-activity service notifications

我有服务

public class GcmIntentService extends IntentService{...}

管理通知。 当用户离开应用程序时收到通知,点击通知后主要活动将恢复并更新

public class MainActivity extends Activity {

...
 lv = (ListView) findViewById(R.id.lv);
adapter = new Adapter(this, item);
lv .setAdapter(adapter);

...
}

但如果用户已在其上,我该如何更新活动?

2 个答案:

答案 0 :(得分:2)

您必须使用BroadcastReciever执行此任务:http://developer.android.com/reference/android/content/BroadcastReceiver.html

在活动中:

public class MainActivity extends Activity {
    public static final String NOTIFY_ACTIVITY_ACTION = "notify_activity";
    private BroadcastReciver broadcastReciver;


 @Override
protected void onStart() {
    super.onStart();
    broadcastReciver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            if (intent.getAction.equals(NOTIFY_ACTIVITY_ACTION ))
            {
             //to do smth
            }
        }
    }

    IntentFilter filter = new IntentFilter( NOTIFY_ACTIVITY_ACTION );
    registerReceiver(broadcastReciver, filter);
}

@Override
protected void onStop()
{
 unregisterReceiver(broadcastReciver);
}


}

在服务中:

Intent broadcastIntent = new Intent();
broadcastIntent.setAction(MainActivity.NOTIFY_ACTIVITY_ACTION );
broadcastIntent.putExtra("addtional_param", 1);
broadcastIntent.putExtra("addtional_param2", 2); //etc

sendBroadcast(broadcastIntent);

<强>更新

BTW最好使用LocalBroadcastManager在应用程序内发送广播。它使用与普通广播相同的方式,但首先创建LocalBroadcastManager:

LocalBroadcastManager manager = LocalBroadcastManager.getInstance(MainActivity.this);

并在onStart中:

manager.registerReciever(broadcastReciver, filter);

并在onStop中:

manager.unregisterBroadcast(broadcastReciver);

并在服务中:

manager.sendBroadcast(broadcastIntent);

答案 1 :(得分:0)

如果您正在使用该列表并且您想重新加载活动只是为了刷新列表,我建议您在收到消息后立即在adatper上使用以下方法。这将刷新列表中的内容,列表将自动更新(无需重新启动活动)

adapter.notifyDataSetChanged()

此方法通知附加的观察者基础数据已更改,反映数据集的任何视图都应自行刷新。

重新加载活动不是一个好选择,但如果没有其他解决方案而不是重新创建活动,我建议刷新视图本身。

希望这有帮助。