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
Ma question est donc comment puis-je obtenir le contexte dans un IntentService?
IntentService
est the Context
, car IntentService
hérite de Context
.
Il suffit d'appeler getApplicationContext()
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);
}
}
Utilisez BackupSchedulingService.this (NomService.this) pour obtenir le contexte
Raison: Le service étend ContextWrapper
ContextWrapper étend le contexte
Vous pouvez utiliser la classe de service Intent en tant que contexte. parce que c'est la hiérarchie de IntentService class.
Donc, en Java
BackupSchedulingService.this
Et dans Kotlin
this@BackupSchedulingService
J'espère que cela aidera les futurs développeurs ...