广播接收器 - MainActivity 不是封闭类

Posted

技术标签:

【中文标题】广播接收器 - MainActivity 不是封闭类【英文标题】:Broadcast Receiver - MainActivity is not an enclosing class 【发布时间】:2020-11-21 05:52:47 【问题描述】:

我知道这个问题被问了很多次,但我找不到适合我的正确答案。 我的本科才第三个学期,所以还没有那么多知识。

在我完成初学者 Java 课程(重点是初学者)后,目前正在上我的第一个 android 课程。

由于电晕,几乎没有导师支持,脚本缺乏体面的解释。

我正在努力实现我的第一个广播接收器。插上电源线应该会祝酒。

我尝试了一个动态接收器,所以我在我的 MainActivity 中注册了接收器,如下所示:

import android.content.IntentFilter;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.content.Intent;


public class MainActivity extends AppCompatActivity 
[...]
private PowerConnectedReceiver mPowerConnectedReceiver;

    public void onResume() 

        super.onResume();

        IntentFilter powerFilter = new IntentFilter(Intent.ACTION_POWER_CONNECTED );

        mPowerConnectedReceiver = new PowerConnectedReceiver();

        getApplicationContext().registerReceiver(mPowerConnectedReceiver , powerFilter);

    

    @Override

    protected void onPause() 

        getApplicationContext().unregisterReceiver(mPowerConnectedReceiver);

        super.onPause();

    

广播接收器如下所示,这是弹出错误的地方。对于 Toast 的上下文,它表示 MainActivity 不是封闭类。

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.widget.Toast;
import static android.widget.Toast.LENGTH_LONG;

public class PowerConnectedReceiver extends BroadcastReceiver 

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

        Toast.makeText(MainActivity.this, "POWER CONNECTED received", LENGTH_LONG ).show();
    

这是脚本中教导的实现方式。

正如我所提到的,我对编程还很陌生,这可能很明显,但我没有看到。

我尝试的唯一方法是将其更改为 MainAcivity.class,但没有任何效果。 感谢支持。

【问题讨论】:

【参考方案1】:

您的代码是正确的,但在 toast 消息中您必须使用接收者的上下文,即 onReceive 方法的第一个参数。

从以下位置更新您的 toast 消息:

Toast.makeText(MainActivity.this, "POWER CONNECTED received", LENGTH_LONG ).show();

Toast.makeText(context, "POWER CONNECTED received", LENGTH_LONG ).show();

【讨论】:

谢谢,这解决了错误,现在一切运行顺利:)

以上是关于广播接收器 - MainActivity 不是封闭类的主要内容,如果未能解决你的问题,请参考以下文章

Android广播错误.MainActivity$MyReceiver; no empty constructor

MainActivity 中的 Android 类没有收到来自警报管理器的广播

BroadCast,BroadCastReceiver

Toast 和广播接收器不起作用

如何从广播接收器类调用颤振方法?

本地广播管理器使用主活动未收到的警报