如何在Intent服务中获取Context

时间:2015-02-26 23:02:41

标签: android intentservice

这里的场景是:我有一个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

5 个答案:

答案 0 :(得分:76)

  

所以我的问题是如何在IntentService中获取上下文?

IntentService ContextIntentService继承自Context

答案 1 :(得分:31)

只需致电getApplicationContext()

答案 2 :(得分:9)

您可以在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);
    }
    }

答案 3 :(得分:2)

使用 BackupSchedulingService.this (ServiceName.this)获取上下文

原因:        服务扩展了ContextWrapper
       ContextWrapper扩展了Context

答案 4 :(得分:1)

您可以将Intent服务类用作Context。因为这是IntentService类的层次结构。

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

所以在 java

BackupSchedulingService.this

Kotlin

this@BackupSchedulingService

希望这将有助于未来的开发者......