web-dev-qa-db-ja.com

インテントサービスでコンテキストを取得する方法

シナリオは次のとおりです。ネットワークコンピューターまたはクラウドへのバックアップを行うWakefulBroadcastReceiverがあります。タブレットがLANにアクセスできることがわかっている深夜にオフになるように設定されています。バックアップは、ストレージアクセスフレームワークを使用して、WakefulBroadcastReceiverをインスタンス化したフラグメントによって「選択」された場所とファイルにデータを保存します。そのため、ContentResolverにアクセスできるようにする必要があり、そのためにはコンテキストが必要です。

私がドキュメントを読んでいる限り、これがBroadcastReceiverの使用目的です。他にあまり起きていないときにバックグラウンドで実行される潜在的に長時間実行されるタスクです。 -バックアップのように。私はすべてをまとめた例を見たことがありません。

IntentServiceでコンテキストを取得するにはどうすればよいですか?以下は、レシーバーとスケジューリングサービスのスニペットです。

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

サンプルコードは、Androidここにあるリファレンスマニュアルのコードとほぼ同じです:

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

41
user4612159

だから私の質問は、IntentServiceでどのようにコンテキストを取得するのですか?

IntentServiceContextを継承するため、IntentServiceContextです。

78
CommonsWare

getApplicationContext()を呼び出すだけです

31
kleinsenberg

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);
    }
    }
9
Chitra Lekha

BackupSchedulingService.this(ServiceName.this)を使用してコンテキストを取得します

理由:サービスがContextWrapperを拡張
ContextWrapperはコンテキストを拡張します

2
Rajat

Intentサービスクラスをコンテキストとして使用できます。これは IntentService クラスの階層であるためです。

  • Android.content.Context
    • Android.content.ContextWrapper
      • Android.app.Service
        • Android.app.IntentService

InJava

BackupSchedulingService.this

そしてKotlin

this@BackupSchedulingService

これが将来の開発者に役立つことを願っています...

1
Wasim K. Memon