简体   繁体   English

Android-如何引用在BroadcastReceiver中注册接收者的活动?

[英]Android - How to reference activity that registered receiver in BroadcastReceiver?

In my MainActivity I have: 在我的MainActivity中,我有:

this.registerReceiver(new SmsListener(),new IntentFilter("RECEIVED SMS"));

In my manifest.xml I have: 在我的manifest.xml中,我有:

 <receiver android:name="com.example.SmsListener">

and in my BroadcastReceiver subclass I have: 在我的BroadcastReceiver子类中,我有:

public class SmsListener extends BroadcastReceiver{

    @Override
    public void onReceive(Context context, Intent intent) {

        // how do I reference MainActivity here?

    }
}

You can't get activity from Context. 您无法从Context获取活动。 If you really need it, I guess your only option is to save the reference of your MainActivity in a private static field and then make a static "getInstance()" method. 如果您确实需要它,我想您唯一的选择是将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;
    }
    ...
}

From your receiver you can now call 现在,您可以从接收方拨打电话

public class SmsListener extends BroadcastReceiver{

    @Override
    public void onReceive(Context context, Intent intent) {

        MainActivity myMainActivity = MainActivity.getInstance();
        ...

    }
}

However, I don't think you want to do it. 但是,我认为您不想这样做。

try this solution 试试这个解决方案

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.

相关问题 Android BroadcastReceiver生命周期:动态注册接收器的文档错误? - Android BroadcastReceiver Lifecycle: documentation wrong for dynamically registered receiver? Android无法暂停活动Receiver未注册 - Android Unable to pause activity Receiver not registered 动态注册BroadcastReceiver-未注册接收器 - Dynamically registering BroadcastReceiver - Receiver not registered android-如何广播接收器是否已注册? - android - how to broadcast receiver is registered or not? 如何检查 Receiver 是否已在 Android 中注册? - How to check if Receiver is registered in Android? 如何注销在其他活动中注册的广播接收器? - How to unregister Broadcast receiver that registered in other activity? 当子活动的接收者在Android中注册时,如何防止超级活动的广播接收者接收广播消息 - How to prevent super activity's broadcast receiver from receiving broadcast messages while the child activity's receiver is registered in Android Android&gt;将活动的引用传递给BroadCastReceiver子类 - Android> passing reference of an activity to a BroadCastReceiver subclass 如何知道我的Android BroadcastReceiver是否已注册 - How to know whether my Android BroadcastReceiver is registered or not 安卓系统 <receiver> -不调用BroadcastReceiver - Android <receiver> - BroadcastReceiver not called
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM