2015-02-26 32 views
31

Đây là kịch bản: Tôi có một WakefulBroadcastReceiver thực hiện sao lưu vào máy tính mạng hoặc đám mây. Nó được thiết lập để tắt trong đêm giữa đêm, khi tôi biết máy tính bảng sẽ có quyền truy cập vào mạng LAN . Bản sao lưu sẽ lưu trữ dữ liệu vào một vị trí và một tệp đã được "chọn" bởi đoạn mà đã khởi tạo WakefulBroadcastReceiver, bằng cách sử dụng Khung Truy cập Bộ nhớ. Vì vậy, tôi cần có thể truy cập vào nội dung ContentResolver và để thực hiện điều đó, tôi cần ngữ cảnh.Cách lấy bối cảnh trong Dịch vụ Intent

Từ tất cả các tài liệu tôi đọc các văn bản, đây là những gì BroadcastReceiver có nghĩa là để được sử dụng cho - một tiềm năng dài chạy nhiệm vụ đó nên được thực hiện ở chế độ nền khi không có nhiều khác là xảy ra. - Giống như một bản sao lưu. Tôi chưa từng thấy bất kỳ ví dụ nào đặt mọi thứ cùng nhau vào nhau .

Làm cách nào để tải ngữ cảnh trong IntentService? Ở đây là một đoạn trích của người nhận và dịch vụ lên lịch.

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

Các mã ví dụ khá nhiều sau chính xác Android tham khảo thủ công mã ở đây:

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

Trả lời

61

Vì vậy, câu hỏi của tôi là làm thế nào để tôi có được bối cảnh trong một IntentService?

Các IntentService các Context, như IntentService thừa hưởng từ Context.

26

Chỉ cần gọi getApplicationContext()

+0

Sự khác nhau giữa 'getApplicationContext()' và sử dụng 'this' là gì? – Zapnologica

+5

nó hoạt động trong "bảo vệ void onHandleIntent (Intent intent) {" nhưng không phải trong constructor IntentService –

+0

@ Bạn có thể giải thích tại sao không? – SLearner

2

Sử dụng BackupSchedulingService.this (ServiceName.this) để có được bối cảnh

Lý do: Dịch vụ mở rộng ContextWrapper
ContextWrapper mở rộng Context

5

Bạn có thể lấy ngữ cảnh trong hàm 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); 
    } 
    } 
Các vấn đề liên quan