这里的场景是:我有一个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
答案 0 :(得分:76)
所以我的问题是如何在IntentService中获取上下文?
IntentService
Context
,IntentService
继承自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类的层次结构。
所以在 java
BackupSchedulingService.this
在 Kotlin
this@BackupSchedulingService
希望这将有助于未来的开发者......