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?

pengguna123321
sumber

Jawaban:

781

Layanan adalah sebuah Konteks

mibollma
sumber
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.

pengguna2138983
sumber
31
  1. Service meluas ContextWrapper
  2. ContextWrapper meluas Context

Begitu....

Context context = this;

(dalam Kelas Layanan atau Kegiatan)

Hardik Gajera
sumber
8

Karena Servicea Context, konteks variabel harus this:

DataBaseManager dbm = Utils.getDataManager(this);   
Jorgesys
sumber
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; 
Ali Azaz Alam
sumber
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;
}
Ecclesiaste Panda
sumber