问题描述
- 利用广播在activity之间传递数据问题
-
我想利用广播在activity之间传递数据(不是直接用intent传递bundle),代码如下:
MainActivity:public class MainActivity extends Activity{
private Button mButton;@override protected void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mButton = (Button)findViewById(R.id.button); mButton.setOnClickListenner(new OnClickListener(){ @override public void onClick(View v){ startActivity(new Intent(MainActivity.this, SecondActivity.class)); Intent broadIntent = new Intent("com.example.broadcasttest"); broadIntent.putExtra("position", 3); sendBroadcast(broadIntent); } }); }
}
SecondActivity:
public class SecondActivity extends Activity{
private int position;@override protected void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.activity_second); IntenFilter filter = new IntenFilter("com.example.broadcasttest"); registerReceiver(receiver, filter); } BroadcastReceiver receiver = new BroadcastReceiver(){ @override public void OnReceive(Context context, Intent intent){ position = intent.getIntExtra("position", 0); Log.e("","position-->"+position); } } @override protected void onDestroy(){ super.OnDestroy(); unRegisterReceiver(receiver); }
}
广播接收不到,请问是什么问题,谢谢。
解决方案
startActivity(new Intent(MainActivity.this, SecondActivity.class));//SecondActivity还没初始化完成,这是异步过程,不是同步,执行下面语句的时候还没初始化完成
Intent broadIntent = new Intent("com.example.broadcasttest");
broadIntent.putExtra("position", 3);
sendBroadcast(broadIntent);
解决方案二:
Intent broadIntent = new Intent("com.example.broadcasttest");
broadIntent.putExtra("position", 3);
sendBroadcast(broadIntent);
startActivity(new Intent(MainActivity.this, SecondActivity.class));
这样子改就好了
解决方案三:
改过了,将startActivity(new Intent(MainActivity.this, SecondActivity.class));放在后面还是收不到。。
解决方案四:
最好还是打日志看看,广播注册成功了没? 有没有发送广播,有没有接收到广播,到底是广播出了问题还是你的数据没有处理好日志打的详细一点就能看出来的
时间: 2024-08-28 10:38:50