android - sirve - BroadcastReceiver: no se puede instanciar la clase; ningún constructor vacío
¿donde se puede usar el constructor super()? (1)
Necesitas declarar tu clase interna como estática. De lo contrario, una clase interna se asocia con una instancia de su clase externa.
Echa un vistazo al tutorial de clases anidadas de Java para obtener más información. Aquí hay un fragmento de código:
Una instancia de InnerClass puede existir solo dentro de una instancia de OuterClass y tiene acceso directo a los métodos y campos de su instancia adjunta. La siguiente figura ilustra esta idea.
y:
Una clase anidada es un miembro de su clase adjunta. Las clases anidadas no estáticas (clases internas) tienen acceso a otros miembros de la clase adjunta, incluso si se declaran privadas. Las clases anidadas estáticas no tienen acceso a otros miembros de la clase adjunta. Como miembro de OuterClass, una clase anidada puede ser declarada privada, pública, protegida o paquete privada. (Recuerde que las clases externas solo pueden ser declaradas públicas o paquete privado).
Tengo clase interna como receptor de difusión:
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>
Y cuando envío el intento con este código: Intento intento = nuevo Intento ();
intent.setAction("com.android.systemui.statusbar.powerwidget.MANUAL_BACKLIGHT");
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
mContext.sendBroadcast(intent);
Tengo estas excepciones:
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
¡Pero tengo un constructor vacío! ¿Por qué no funciona?