У меня есть класс приложений, как это:ApplicationContext в BroadcastReceiver
public class MyApplication extends Application {
}
Он зарегистрирован в манифесте:
<application
android:name=".MyApplication"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
...
</application>
Я использую этот класс приложений для хранения компонентов Dagger и т.д.
Сейчас у меня есть BroadcastReceiver:
public class MyBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(final Context context, final Intent intent){
MyApplication myApplication = (MyApplication) context.getApplicationContext();
}
}
Он зарегистрирован в Manifest как InstallReferrerReceiver:
<receiver
android:name="my.package.MyReceiver"
android:exported="true">
<intent-filter>
<action android:name="com.android.vending.INSTALL_REFERRER"/>
</intent-filter>
</receiver>
Как вы можете видеть, что я бросил контекст приложения для моего класса Application, который прекрасно работает в деятельности и т.д., а также, как правило, здесь.
Via Crashlytics хотя я получаю исключение:
Unable to start receiver my.package.BroadcastReceiver: java.lang.ClassCastException: android.app.Application cannot be cast to my.package.MyApplication
Мой вопрос заключается в том: я негарантированно получить свой объект Application в контексте приложения в BroadcastReceiver?
Это должно работать нормально. Существуют ли какие-либо общие черты между устройствами, сообщающими об этом сбое? Кроме того, есть ли что-нибудь необычное в элементе '' (например, вы используете 'android: process') или как передается трансляция? –
CommonsWare
Я думаю, что у вас нет гарантированного доступа к вашему приложению в вашем «BroadcastReceiver» (я ищу источник). Вы можете проверить 'if (context.getApplicationContext() instanceof MyApplication)? –
@CommonsWare К сожалению, это было, вероятно, важно добавить, я добавил запись манифеста для получателя. – FWeigl