我有内部类作为广播接收器:
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
但我有一个空的构造函数!为什么它不起作用?
答案 0 :(得分:121)
您需要将内部类声明为静态。否则,内部类与外部类的实例相关联。
查看Java Nested Classes tutorial了解详情。这是一个片段:
InnerClass的一个实例只能存在于一个实例中 OuterClass并且可以直接访问其方法和字段 封闭实例。下图说明了这个想法。
和
嵌套类是其封闭类的成员。非静态嵌套 类(内部类)可以访问封闭的其他成员 类,即使它们被宣布为私有。静态嵌套类不会 可以访问封闭类的其他成员。作为会员 在OuterClass中,嵌套类可以声明为private,public, 受保护或包私有。 (回想一下,外类只能是 声明公开或包私有。)