Dapatkan Konteks dalam Layanan


280

Apakah ada cara yang dapat diandalkan untuk mendapatkan ContextdariService ?

Saya ingin mendaftarkan penerima siaran, ACTION_PHONE_STATE_CHANGEDtetapi saya tidak memerlukan aplikasi saya untuk selalu mendapatkan informasi ini, jadi saya tidak memasukkannya ke dalamManifest .

Namun, saya tidak dapat meminta penerima siaran dibunuh oleh GC ketika saya membutuhkan informasi ini, jadi saya mendaftarkan penerima siaran di a Service .

Karena itu, saya perlu Contextmenelepon registerReceiver(). Ketika saya tidak lagi membutuhkan ACTION_PHONE_STATE_CHANGEDsaya membatalkan registrasi .

Ada tips?

Jawaban:


781

Layanan adalah sebuah Konteks


3
Saya punya masalah ini, tetapi ternyata itu adalah utas pekerja yang tidak memiliki konteks. Saya memecahkannya lewat konteks ketika membangun utas.
ctrl-alt-delor

17
Catatan: Konteks dalam layanan tidak akan terlihat sampai onStart atau onStartCommand dalam layanan: stackoverflow.com/questions/7619917/…
class

36
Ini mungkin jawaban terpendek dengan suara terbanyak di stackoverflow
Sayka

4
mempertimbangkan ukuran jawaban dan upvotes yang diterima, saya tidak berpikir ada jawaban lain dalam SO mengalahkan ini :)
Amruta-Pani

2
4 kata ini baru saja menyelesaikan masalah saya yang telah saya coba pecahkan selama 3 jam.
Nirup Iyer

64

Servicemeluas ContextWrapperyang meluas Context. Karena itu Serviceadalah a Context. Gunakan 'this'kata kunci dalam layanan.


31
  1. Service meluas ContextWrapper
  2. ContextWrapper meluas Context

Begitu....

Context context = this;

(dalam Kelas Layanan atau Kegiatan)


8

Karena Servicea Context, konteks variabel harus this:

DataBaseManager dbm = Utils.getDataManager(this);   

5

Karena Layanan sudah menjadi Konteks itu sendiri

Anda bahkan bisa mendapatkannya melalui:

Context mContext = this;

ATAU

Context mContext = [class name].this;  //[] only specify the class name
// mContext = JobServiceSchedule.this; 

1

untuk berjaga-jaga seandainya seseorang mendapatkan NullPointerException, Anda perlu memahami konteksnyaonCreate().

Serviceadalah Context, jadi lakukan ini:

@Override
public void onCreate() {
    super.onCreate();
    context = this;
}
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.