[英]Android BroadcastReceiver Lifecycle: documentation wrong for dynamically registered receiver?
[英]Android - How to reference activity that registered receiver in BroadcastReceiver?
在我的MainActivity中,我有:
this.registerReceiver(new SmsListener(),new IntentFilter("RECEIVED SMS"));
在我的manifest.xml中,我有:
<receiver android:name="com.example.SmsListener">
在我的BroadcastReceiver子类中,我有:
public class SmsListener extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
// how do I reference MainActivity here?
}
}
您无法从Context获取活动。 如果您确实需要它,我想您唯一的选择是将MainActivity的引用保存在私有静态字段中,然后创建一个静态“ getInstance()”方法。
public class MainActivity extends Activity {
private static MainActivity sActivity = null;
...
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
sActivity = this;
...
}
public static MainActivity getInstance() {
return sActivity;
}
...
}
现在,您可以从接收方拨打电话
public class SmsListener extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
MainActivity myMainActivity = MainActivity.getInstance();
...
}
}
但是,我认为您不想这样做。
试试这个解决方案
public class SmsListener extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
Intent i = new Intent (context, MainActivity.class);
context.startActivity(i);
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.