int*_*_32 38 android 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());
}
};
Run Code Online (Sandbox Code Playgroud)
AndroidManifest:
<receiver android:name=".statusbar.powerwidget.PowerWidgetGrid$ManualBacklightReceiver">
<intent-filter>
<action android:name="com.android.systemui.statusbar.powerwidget.MANUAL_BACKLIGHT"/>
</intent-filter>
</receiver>
Run Code Online (Sandbox Code Playgroud)
当我用这段代码发送意图时:Intent intent = new Intent();
intent.setAction("com.android.systemui.statusbar.powerwidget.MANUAL_BACKLIGHT");
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
mContext.sendBroadcast(intent);
Run Code Online (Sandbox Code Playgroud)
我得到以下例外:
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
Run Code Online (Sandbox Code Playgroud)
但我有一个空的构造函数!为什么它不起作用?
jar*_*rad 121
您需要将内部类声明为静态.否则,内部类与外部类的实例相关联.
有关详细信息,请查看Java嵌套类教程.这是一个片段:
InnerClass的实例只能存在于OuterClass的实例中,并且可以直接访问其封闭实例的方法和字段.下图说明了这个想法.
和:
嵌套类是其封闭类的成员.非静态嵌套类(内部类)可以访问封闭类的其他成员,即使它们被声明为私有.静态嵌套类无权访问封闭类的其他成员.作为OuterClass的成员,可以将嵌套类声明为private,public,protected或package private.(回想一下,外部类只能声明为public或package private.)
| 归档时间: |
|
| 查看次数: |
34411 次 |
| 最近记录: |