Подтвердить что ты не робот

Как получить контекст в службе намерений

Здесь сценарий: у меня есть 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

4b9b3361

Ответ 1

Итак, мой вопрос: как получить контекст в IntentService?

IntentService - это Context, поскольку IntentService наследуется от Context.

Ответ 2

Просто позвоните getApplicationContext()

Ответ 3

Вы можете получить контекст в функции 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);
    }
    }

Ответ 4

Используйте BackupSchedulingService.this (ServiceName.this), чтобы получить контекст

Причина:      Служба расширяет ContextWrapper
     ContextWrapper расширяет контекст