Ответ 1
Итак, мой вопрос: как получить контекст в IntentService?
IntentService
- это Context
, поскольку IntentService
наследуется от Context
.
Здесь сценарий: у меня есть WakefulBroadcastReceiver, который делает резервное копирование на сетевой компьютер или облако. Он должен уйти в в середине ночи, когда я знаю, что планшет будет иметь доступ к LAN. Резервная копия будет хранить данные в местоположении и файл, который был "выбран" фрагментом, который создавал экземпляр WakefulBroadcastReceiver, используя структуру доступа к хранилищу. Поэтому мне нужно иметь доступ к ContentResolver и для этого мне нужен контекст.
Из всего моего чтения документов, это то, что BroadcastReceiver предназначен для использования - потенциально долгое время задача, которая должна выполняться в фоновом режиме, когда происходит. - Как резервная копия. Я просто не видел примеров, которые ставят все вместе.
Как получить контекст в IntentService? Вот является фрагментом получателя и службой планирования.
public class BackupAlarmReceiver extends WakefulBroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Intent service = new Intent(context, BackupSchedulingService.class);
startWakefulService(context, service);
}
}
public class BackupSchedulingService extends IntentService {
public BackupSchedulingService() {
super("BackupSchedulingService");
}
@Override
protected void onHandleIntent(Intent intent) {
Bundle extras = intent.getExtras();
// How to get the context - it was a parameter when
// creating the new IntentService class above?
}
}
Пример кода в значительной степени следует именно для ссылки на Android здесь:
https://developer.android.com/reference/android/support/v4/content/WakefulBroadcastReceiver.html
Итак, мой вопрос: как получить контекст в IntentService?
IntentService
- это Context
, поскольку IntentService
наследуется от Context
.
Просто позвоните getApplicationContext()
Вы можете получить контекст в функции onStartCommand().
public class ExampleService extends IntentService {
private Context mContext;
public ExampleService(String name) {
super(name);
}
@Override
protected void onHandleIntent(Intent intent) {
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
mContext = getApplicationContext();
return super.onStartCommand(intent, flags, startId);
}
}
Используйте BackupSchedulingService.this (ServiceName.this), чтобы получить контекст
Причина: Служба расширяет ContextWrapper
ContextWrapper расширяет контекст