У меня проблема с BroadcastReceiver. Если я объявляю действие в манифесте таким образом:Android BroadcastReceiver: невозможно создать экземпляр приемника - нет пустого конструктора
<receiver android:name="com.app.activity.observer.DataEntryObserver" >
<intent-filter>
<action android:name= "@string/action_db_updated" />
</intent-filter>
</receiver>
где в strings.xml у меня есть:
<string name="action_db_updated">com.app.DB_UPDATED</string>
все работает хорошо. Но если бы я изменить его на:
<receiver android:name="com.app.activity.observer.DataEntryObserver" >
<intent-filter>
<action android:name= "com.app.DB_UPDATED" />
</intent-filter>
</receiver>
У меня есть это исключение, так как приемник называется:
java.lang.RuntimeException: Невозможно создать экземпляр приемника com.app.activity.observer.DataEntryObserver: Java. lang.InstantiationException: невозможно создать экземпляр класса com.app.activity.observer.DataEntryObserver; не пустой конструктор
Я бы держать рабочую версию, но Play магазин не позволяет мне опубликовать приложение, потому что он ожидает строковое значение, а не переменные @ строка/..
моего приемника является OuterClass и определяется как:
public class DataEntryObserver extends BroadcastReceiver{
private AppUsageLoader dLoader;
public DataEntryObserver(AppUsageLoader dLoader) {
this.dLoader = dLoader;
IntentFilter filter = new IntentFilter(
ReaLifeApplication.ACTION_DB_UPDATED);
dLoader.getContext().registerReceiver(this, filter);
}
@Override
public void onReceive(Context arg0, Intent arg1) {
// Tell the loader about the change.
dLoader.onContentChanged();
}
}
Создание BroadcastReceiver статического класса - плохая архитектура. Это не позволит вам вызвать много методов внутри него, включая 'startActivity' –