サービスのコンテキストを取得する


280

Contextからを取得する信頼できる方法はありますServiceか?

ブロードキャストレシーバーを登録したいのですACTION_PHONE_STATE_CHANGEDが、アプリが常にこの情報を取得する必要はないので、には入れませんManifest

ただし、この情報が必要なときにブロードキャストレシーバーをGCによって強制終了させることはできないため、ブロードキャストレシーバーをに登録していServiceます。

したがって、をContext呼び出すにはtoが必要registerReceiver()です。不要になった場合は、登録ACTION_PHONE_STATE_CHANGED解除します。

任意のヒント?

回答:


780

3
私はこの問題を抱えていましたが、コンテキストのないのはワーカースレッドであることがわかりました。スレッドを構築するときにコンテキストを渡すことで解決しました。
ctrl-alt-delor 2013年

17
注:サービス内のコンテキストはサービスにONSTARTまたはonStartCommandまで表示されません。stackoverflow.com/questions/7619917/...
クラス

36
これは、stackoverflowで最高票を獲得した最も短い回答である可能性があります
Sayka

4
受け取った回答と賛成投票の大きさを考えると、SOの他の回答はこれに勝るものはないと思います:)
Amruta-Pani

2
これらの4つの単語は、私が3時間解決しようとしてきた私の問題を解決しました。
Nirup Iyer 2017

64

Service拡張ContextWrapperする拡張Context。したがってはServiceですContext'this'サービスでキーワードを使用します。


31
  1. Service 伸びる ContextWrapper
  2. ContextWrapper 伸びる Context

そう....

Context context = this;

(サービスクラスまたはアクティビティクラス)


8

以来ServiceContext、変数のコンテキストでなければなりませんthis

DataBaseManager dbm = Utils.getDataManager(this);   

5

サービスがすでにあるコンテキスト自体

あなたもそれを乗り越えることができます:

Context mContext = this;

または

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

1

誰かがを取得している場合に備えてNullPointerException、内部のコンテキストを取得する必要がありますonCreate().

ServiceContextなので、次のようにします。

@Override
public void onCreate() {
    super.onCreate();
    context = this;
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.