2012-08-24 21 views
10

Tôi đã có mã này:Tôi có thể sử dụng AlarmManager với LocalBroadcastManager trên Android không?

private AlarmManager alarmManager = (AlarmManager)getSystemService(Context.ALARM_SERVICE); 
private PendingIntent alarmIntent = PendingIntent.getBroadcast(this, 0, new Intent("my action-name"), 0); 

alarmManager.setInexactRepeating((int)AlarmManager.ELAPSED_REALTIME_WAKEUP,  SystemClock.elapsedRealtime() + autoUpdateIntervalInMinutes * 60 * 1000, autoUpdateIntervalInMinutes * 60 * 1000, alarmIntent); 

Nhưng tôi muốn thay đổi điều này cho LocalBroadcastManager. Điều này có thể không?

Trả lời

8

Không, không thể, vì LocalBroadcastManager chỉ dành cho quy trình của riêng bạn và chương trình phụ trợ của AlarmManager chạy trong một quy trình khác. Đó là lý do tại sao không có cách nào để tạo một PendingIntent hoạt động với LocalBroadcastManager.

+2

là có một cách để làm cho mục đích riêng tư hơn, vì vậy mà các ứng dụng khác sẽ không thể sử dụng nó? –

+2

Tóm lại, không. Tuy nhiên, bất kỳ ứng dụng nào khác muốn nghe chương trình phát sóng của bạn sẽ cần phải biết chuỗi hành động đầy đủ. Điều này ít nhất mang lại cho bạn một số bảo mật thông qua sự tối tăm (không thực sự an toàn). – Doge

4

Nhưng bạn có thể đăng ký một BroadcastReceiver mà về cơ bản chuyển đổi "toàn cầu" Broadcast thành một LocalBroadcast:

public class AutoUpdateBroadcastReceiver extends BroadcastReceiver { 

    private static final String TAG = AutoUpdateBroadcastReceiver.class.getSimpleName(); 

    @Override 
    public void onReceive(Context context, Intent intent) { 
    Log.d(TAG, ".onReceive"); 
    LocalBroadcastManager lbm = LocalBroadcastManager.getInstance(context); 
    lbm.sendBroadcast(intent); 
    } 
} 
+2

Có, bạn _can_ nhưng điều đó không có nghĩa là bạn _should_. Toàn bộ điểm của 'LocalBroadcastManager' là nó chỉ có thể nhận các chương trình phát sóng từ bên trong ứng dụng, vì lý do bảo mật. Nếu bạn tạo một máy thu nhận các chương trình phát sóng từ bên ngoài và phát lại chúng trên trình quản lý cục bộ, nó sẽ đánh bại toàn bộ mục đích của 'LocalBroadcastManager'. Bạn cũng có thể chỉ cần đăng ký người nhận không cục bộ và không gây nguy hiểm cho mọi thứ khác có thể được đăng ký trên 'LocalBroadcastManager'. – spaaarky21

Các vấn đề liên quan