广播接收器 - MainActivity 不是封闭的 class
Broadcast Receiver - MainActivity is not an enclosing class
我知道这个问题被问过很多次,但我找不到适合我的正确答案。
我才读本科第三学期,所以还没有那么多知识。
目前我在完成初学者 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 不是封闭的 class.
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,但没有任何效果。
感谢支持。
您的代码是正确的,但是在 toast 消息中您必须使用接收者的上下文,即 onReceive 方法的第一个参数。
从以下位置更新您的 Toast 消息:
Toast.makeText(MainActivity.this, "POWER CONNECTED received", LENGTH_LONG ).show();
至
Toast.makeText(context, "POWER CONNECTED received", LENGTH_LONG ).show();
我知道这个问题被问过很多次,但我找不到适合我的正确答案。 我才读本科第三学期,所以还没有那么多知识。
目前我在完成初学者 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 不是封闭的 class.
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,但没有任何效果。 感谢支持。
您的代码是正确的,但是在 toast 消息中您必须使用接收者的上下文,即 onReceive 方法的第一个参数。
从以下位置更新您的 Toast 消息:
Toast.makeText(MainActivity.this, "POWER CONNECTED received", LENGTH_LONG ).show();
至
Toast.makeText(context, "POWER CONNECTED received", LENGTH_LONG ).show();