obtener getapplicationcontext context android intentservice

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

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