android - getapplicationcontext - Cómo obtener contexto en un servicio intencionado
getapplicationcontext android (5)
Entonces mi pregunta es ¿cómo obtengo el contexto en un servicio de intenciones?
IntentService
es el Context
, ya que IntentService
hereda de Context
.
Aquí está el escenario: Tengo un WakefulBroadcastReceiver que hace una copia de seguridad en una computadora de red o en la nube. Está programado para sonar en el medio de la noche, cuando sé que la tableta tendrá acceso a la LAN. La copia de seguridad almacenará los datos en una ubicación y un archivo que fue "seleccionado" por el fragmento que creó la instancia de WakefulBroadcastReceiver, utilizando el Marco de acceso de almacenamiento. Entonces necesito poder acceder al ContentResolver y para hacerlo necesito el contexto.
De todas mis lecturas de los documentos, esto es para lo que se usa el BroadcastReceiver, una tarea potencialmente larga que debería realizarse en segundo plano cuando no ocurre mucho más. - Como una copia de seguridad. Simplemente no he visto ningún ejemplo que junte todo.
¿Cómo obtengo el contexto en un IntentService? Aquí hay un fragmento del receptor y el servicio de programación.
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?
}
}
El código de ejemplo básicamente sigue exactamente el código del manual de referencia de Android aquí:
https://developer.android.com/reference/android/support/v4/content/WakefulBroadcastReceiver.html
Puede obtener el contexto en la función 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);
}
}
Puede usar la clase de servicio de intención como contexto. porque esta es la jerarquía de la clase IntentService .
- android.content.Context
- android.content.ContextWrapper
- android.app.Service
- android.app.IntentService
- android.app.Service
- android.content.ContextWrapper
Entonces en Java
BackupSchedulingService.this
Y en Kotlin
this@BackupSchedulingService
Espero que esto ayude a los futuros desarrolladores ...
Simplemente llame a getApplicationContext()
Use BackupSchedulingService.this (ServiceName.this) para obtener el contexto
Motivo : el servicio extiende ContextWrapper
ContextWrapper extiende contexto