2015-02-26 16 views
31

İşte senaryo: Bir ağ bilgisayarına veya buluta bir yedekleme yapan bir WakefulBroadcastReceiver var. Tabletin LAN'a erişebileceğini bildiğimde, gecenin ortasındaki 'un ortasında gitmeye ayarlı. Yedekleme, verileri bir konuma ve Depolama Erişimi Çerçevesini kullanarak WakefulBroadcastReceiver, 'u başlatan parça tarafından "seçildiği" bir dosyaya depolar. Bu yüzden ContentResolver'a erişebilmem ve bu bağlama ihtiyacım var. pek başka oluyor olduğunda arka planda yapılmalıdır potansiyel uzun çalışan görev - tüm belgeleri benim okuma itibarenBir Intent Hizmeti'nde Bağlam nasıl edinilir

, bu BroadcastReceiver için kullanılacak kastedilen budur. - Yedekleme gibi. Ben sadece her şeyi bir araya getiren hiçbir örnek görmedim.

İçeriği bir IntentService'de nasıl edinebilirim? Burada , alıcının ve programlama servisinin bir pasajıdır.

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

örnek kod hemen hemen burada tam olarak Android referans manuel kod aşağıda:

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

cevap

61

Benim soru ben bir IntentService bağlam nasıl alabilirim edilir?

IntentServiceContext den IntentService INHERITS olarak, Context olup.

26

sadece bağlam almak için getApplicationContext()

+0

'getApplicationContext()' ile 'this' arasındaki fark nedir? – Zapnologica

+5

"korunan void onHandleIntent (Intent intent) {" 'da değil, IntentService yapıcısında değil –

+0

@Moises içinde çalışmaktadır "Nedenini açıklayabilir misiniz? – SLearner

2

Kullanım BackupSchedulingService.this (ServiceName.this) aramak

Nedeni: Servis
ContextWrapper Bağlam

5

Sen alabilirsiniz uzanır ContextWrapper uzanır onStartCommand() işlevindeki bağlam.

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); 
    } 
    }