2010-08-10 24 views
9

Tôi muốn sử dụng báo thức để chạy một số mã vào một thời điểm nhất định. Tôi đã thực hiện thành công một báo động với máy thu phát đã đăng ký trong tệp kê khai nhưng theo cách tôi hiểu, phương pháp này sử dụng một lớp riêng cho bộ thu phát sóng.Trình quản lý báo động Android với bộ thu phát sóng được đăng ký trong mã thay vì hiển thị

Tôi có thể sử dụng phương pháp này để bắt đầu một hoạt động khác nhưng tôi không thể sử dụng nó để chạy một phương pháp trong hoạt động chính của mình?

(how can I notify a running activity from a broadcast receiver?)

Vì vậy, tôi đã cố gắng để đăng ký thu phát sóng của tôi trong hoạt động chính của tôi như được giải thích trong câu trả lời ở trên.

private BroadcastReceiver receiver = new BroadcastReceiver(){ 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     Toast.makeText(context, "hello", Toast.LENGTH_SHORT).show(); 
     uploadDB();   
    } 
};  

public void onResume() { 
    super.onResume(); 

    IntentFilter filter = new IntentFilter(); 
    filter.addAction(null); 

    this.registerReceiver(this.receiver, filter); 
} 

public void onPause() { 
    super.onPause(); 

    this.unregisterReceiver(this.receiver); 
} 

Tuy nhiên tôi không thể làm việc này với trình quản lý báo thức, tôi không chắc chắn cách liên kết ý định cảnh báo với người phát sóng. Bất cứ ai có thể chỉ cho tôi một ví dụ về đăng ký một máy thu phát sóng báo động quản lý tự động trong hoạt động? Hoặc giải thích làm thế nào tôi sẽ làm điều này?

Trả lời

15

Làm thế nào về điều này?

Intent startIntent = new Intent("WhatEverYouWant"); 
PendingIntent startPIntent = PendingIntent.getBroadcast(context, 0, startIntent, 0); 
AlarmManager alarm = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); 
alarm.set(AlarmManager.RTC_WAKEUP, triggerTime, startPIntent); 

Và sau đó trong tập tin Manifest.xml của bạn:

<receiver android:name="com.package.YourOnReceiver"> 
    <intent-filter> 
     <action android:name="WhatEverYouWant" /> 
    </intent-filter> 
</receiver> 

Vì vậy, như xa như tôi biết bạn vẫn phải khai báo thu trong Manifest. Tôi không chắc chắn nếu bạn có thể đặt nó vào một cá thể riêng bên trong hoạt động của bạn. Bạn có thể tuyên bố một onReceive bên trong hoạt động của bạn và gọi đó (nếu BroadcastReceiver có một giao diện. Tôi không biết nếu nó có.)

+2

Tuyệt vời, tôi đã cố gắng làm cho nó hoạt động, tôi không cần phải thêm mã vào tệp kê khai. Chỉ cần đăng ký bộ thu phát sóng một cách hợp lý với một intentfilter cùng tên. – serenskye

+0

Cảm ơn bạn và +1 cho bạn – Barrier

1

Bắt đầu một ý định báo động từ nơi bạn muốn bắt đầu báo động. viết mã bên dưới từ nơi bạn muốn bắt đầu nghe báo thức

Intent myIntent = new Intent(getBaseContext(), **AlarmReceiver**.class); 
       PendingIntent pendingIntent = PendingIntent.getBroadcast(getBaseContext(), 0, myIntent, 0); 
       AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE); 
       Calendar calendar = Calendar.getInstance(); 
       calendar.setTimeInMillis(System.currentTimeMillis()); 
       calendar.add(Calendar.MINUTE, shpref.getInt("timeoutint", 30)); 
       alarmManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pendingIntent); 

Và trong bộ thu phát, viết mã bạn muốn nhận. Và trong menifest viết bên dưới

<receiver android:name=".AlarmReceiver" android:process=":remote"/> 

Bạn cũng có thể đặt báo thức lặp đi lặp lại. Hy vọng nó sẽ giúp bạn!

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