web-dev-qa-db-fra.com

Comment obtenir du contexte dans un service d'intention

Voici le scénario: J'ai un WakefulBroadcastReceiver qui effectue une sauvegarde Sur un ordinateur en réseau ou sur le cloud. Il est sur le point de s’éteindre au milieu de la nuit lorsque je sais que la tablette aura accès au réseau local La sauvegarde stockera les données dans un emplacement et un fichier "choisis" par le fragment qui a instancié WakefulBroadcastReceiver, .__, à l'aide de Storage Access Framework. Il me faut donc pouvoir accéder à ContentResolver et, pour ce faire, j'ai besoin du contexte.

D'après toutes mes lectures des documents, voici ce à quoi le BroadcastReceiver est destiné - une tâche potentiellement longue Qui devrait être effectuée en arrière-plan lorsque rien d'autre ne se passe - Comme une sauvegarde. Je n'ai juste vu aucun exemple qui rassemble tout.

Comment puis-je obtenir le contexte dans un IntentService? Voici un extrait du destinataire et du service de planification. 

  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? 
         }
}

L'exemple de code suit à peu près exactement la référence Android Code manuel ici:

https://developer.Android.com/reference/Android/support/v4/content/WakefulBroadcastReceiver.html

39
user4612159

Ma question est donc comment puis-je obtenir le contexte dans un IntentService?

IntentService est the Context, car IntentService hérite de Context.

75
CommonsWare

Il suffit d'appeler getApplicationContext()

29
kleinsenberg

Vous pouvez obtenir le contexte dans la fonction 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);
    }
    }
9
Chitra Lekha

Utilisez BackupSchedulingService.this (NomService.this) pour obtenir le contexte

Raison: Le service étend ContextWrapper
ContextWrapper étend le contexte

2
Rajat

Vous pouvez utiliser la classe de service Intent en tant que contexte. parce que c'est la hiérarchie de IntentService class. 

  • Android.content.Context
    • Android.content.ContextWrapper
      • Android.app.Service
        • Android.app.IntentService

Donc, en Java 

BackupSchedulingService.this 

Et dans Kotlin

this@BackupSchedulingService

J'espère que cela aidera les futurs développeurs ...

0
Wasim K. Memon