Tôi có một ứng dụng đặt báo thức bằng AlarmManager, khởi động một Hoạt động khác khi nó tắt. AlarmManager lấy một PendingIntent và sinh ra một lớp BroadcastReceiver khi thời gian được chỉ định xuất hiện. Tôi tự hỏi liệu có bất kỳ cách nào mà tôi có thể vượt qua đối số cho BroadcastReceiver này thông qua các đối tượng Intent mà đi vào PendingIntent?Truyền đối số cho BroadcastReceiver thông qua Intent trong Android
Về cơ bản những gì tôi muốn làm là một cái gì đó như thế này:
Intent my_intent = new Intent(this, BroadcastService.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, my_intent, 0);
my_intent.putExtra("arg1", arg1);
AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
alarmManager.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + (1000), pendingIntent);
và tôi muốn để có thể lấy arg1 trong (Context, Ý định) phương pháp onReceive của BroadcastReceiver. Tôi đã thấy rằng biến cục bộ my_intent sẽ là tham số thứ hai được truyền vào onReceive bởi PendingIntent, nhưng dường như điều đó không đúng. Có thể truyền các tham số giữa một Activity và BroadcastReceiver trong thời trang này (sử dụng Intent.putExtra()) hay tôi nên sử dụng một ContentProvider thay thế?
Cảm ơn!
Iva
À vâng, tôi bỏ lỡ; Tôi đang sử dụng Báo thức làm đại lộ để gọi một hoạt động cụ thể tại một thời điểm cụ thể và khi báo thức tắt, tôi tạo thông báo mà người dùng có thể thả xuống bất cứ khi nào thuận tiện và chỉ sau đó gọi hoạt động, để tôi không 't làm phiền bất cứ điều gì họ xảy ra để được làm. Cảm ơn câu trả lời của bạn! – ivcheto
Hmm, thêm PendingIntent.FLAG_UPDATE_CURRENT làm cờ khi nhận được PendingIntent dường như không thay đổi bất cứ điều gì; Tôi vẫn không nhận được các tính năng bổ sung từ mục đích trong Hoạt động ban đầu của tôi với mục đích được chuyển đến onReceive – ivcheto
Bạn có đang gọi putExtra() trước khi tạo PendingIntent không? Tôi không biết khi nào PendingIntent tuần tự hóa Intent, nhưng nếu nó thực hiện nó ngay lập tức, các cuộc gọi putExtra() sau khi tạo PendingIntent sẽ không có hiệu lực. – CommonsWare