如何使用Broadcast Receiver中的不同数据启动相同的活动?

时间:2014-01-28 06:20:48

标签: android android-intent broadcastreceiver android-lifecycle

我有一项活动,我希望在不同时间使用广播接收器中的不同变量启动。

  public void onReceive(Context context, Intent intent) {
    String action = intent.getAction();
    if (action.equalsIgnoreCase("tv.abcd.v4.ORIGINAL_VIDEO_SCENE")){
                channelName = intent.getExtras().getString("com.abcd.Channel");
            JSONObject json = new JSONObject(intent.getExtras().getString("com.abcd.Data"));
            String incomingScene = json.getString("url");
            scene.putExtra("channel", channelName);
            scene.putExtra("url", incomingScene);
            scene.addFlags(Intent.FLAG_FROM_BACKGROUND);
            scene.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); 
            scene.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
            context.startActivity(scene);

  }

我有通过Intent和活动接收器启动活动的代码,以显示数据。

            Intent intent = getIntent();
sceneUrl = intent.getStringExtra("url");
Log.d("Image.incomingscene.url",sceneUrl);
channelName = intent.getStringExtra("channel");
Log.d("Image.incomingSceneAvatar",networkAvatar);
image = (ImageView)findViewById(R.id.imageView1);
image.setScaleType(ScaleType.FIT_CENTER);
progressBar = (ProgressBar)findViewById(R.id.progressBar1);
Picasso.with(this).load(sceneUrl).skipMemoryCache().fit().into(image, new EmptyCallback() {

}); 

此后,我想从广播接收器再次使用不同的数据启动相同的活动。所以我希望以前的活动能够解决问题并允许这个新实例启动。

如何完成这项壮举?

1 个答案:

答案 0 :(得分:1)

从活动中注册另一个广播接收器。然后,当你想杀死它时,从你提到的广播接收器发送广播消息。

在您的broadcastReceiver中执行以下操作:

  public static final String CLOSE_Activity= "com.mypackage.closeactivity";

并在yopr OnReceive方法中执行以下操作:

@Override   
 public void onReceive(Context context, Intent intent) {  
       System.out.println("HIT OUTGOING");      
   Intent i = new Intent();      
   i.setAction(CLOSE_Activity);       
  context.sendBroadcast(i);    
 } 

然后在你的活动中找到一个接收者并在onResume方法中注册它并在onPause方法中取消它,如下所示:

private BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        if (intent.getAction().equals(RECEIVER_Class.CLOSE_Activity)) {
            finish();
        }
    }
}

活动onResume方法:

@Override
public void onResume() {
    registerReceiver(broadcastReceiver, new IntentFilter(RECEIVER_Class.CLOSE_Activity));
}

活动onPause方法:

 @Override
    public void onPause() {
        super.onPause();
        unregisterReceiver(receiver);
}

请给我一些反馈

希望有所帮助。