广播接收器:不能实例类; 没有空的构造(BroadcastReceiver: can't

2019-06-23 22:46发布

我有内部类的广播接收器:

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.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

但我有一个空的构造! 为什么它不工作?

Answer 1:

需要声明的内部类静态。 否则,一个内部类与您的外部类的一个实例相关联。

退房Java的嵌套类教程的详细信息。 这里是一个片段:

将InnerClass的实例只能在在OuterClass的实例存在并有方法及其外围实例字段的直接访问。 下图说明了这个想法。

和:

嵌套类是它包围类的成员。 非静态内部类(内部类)可以访问外部类中的其他成员,即使它们被声明为private。 静态嵌套类不具有访问封闭类的其他成员。 由于在OuterClass的一员,一个嵌套类可以被声明为私有,公有,保护或包专用。 (回想一下,外部类只能被声明为public或包专用。)



文章来源: BroadcastReceiver: can't instantiate class; no empty constructor