BroadcastReceiver:不能实例化类; 没有空的构造函数

我有内部类作为广播接收器:

public class ManualBacklightReceiver extends BroadcastReceiver { public static final String ACTION_MANUAL_BACKLIGHT = "com.android.systemui.statusbar.powerwidget.MANUAL_BACKLIGHT"; public ManualBacklightReceiver() { } @Override public void onReceive(Context context, Intent intent) { Log.d("ManualBacklightReceiver", intent.getAction()); } }; 

AndroidManifest:

 <receiver android:name=".statusbar.powerwidget.PowerWidgetGrid$ManualBacklightReceiver"> <intent-filter> <action android:name="com.android.systemui.statusbar.powerwidget.MANUAL_BACKLIGHT"/> </intent-filter> </receiver> 

当我用这个代码发送意图时:Intent intent = new Intent();

 intent.setAction("com.android.systemui.statusbar.powerwidget.MANUAL_BACKLIGHT"); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); mContext.sendBroadcast(intent); 

我得到这些例外:

 java.lang.RuntimeException: Unable to instantiate receiver com.android.systemui.statusbar.powerwidget.PowerWidgetGrid$ManualBacklightReceiver: java.lang.InstantiationException: can't instantiate class com.android.systemui.statusbar.powerwidget.PowerWidgetGrid$ManualBacklightReceiver; no empty constructor Caused by: java.lang.InstantiationException: can't instantiate class com.android.systemui.statusbar.powerwidget.PowerWidgetGrid$ManualBacklightReceiver; no empty constructor 

但是我有一个空的构造函数! 为什么它不起作用?

你需要声明你的内部类是静态的。 否则,内部类将与外部类的实例关联。

查看“ Java嵌套类”教程了解详细信息。 这是一个片段:

InnerClass的实例只能存在于OuterClass的一个实例中,并且可以直接访问其封闭实例的方法和字段。 下图说明了这个想法。

和:

嵌套类是其封闭类的成员。 非静态嵌套类(内部类)可以访问封闭类的其他成员,即使它们被声明为私有。 静态嵌套类不能访问封闭类的其他成员。 作为OuterClass的成员,可以将嵌套类声明为private,public,protected或package private。 (回想一下,只能将外部类声明为public或package private。)