1

我打電話給BroadcastReceiver通過AlarmManager它對我來說工作正常。爲廣播接收機創建多個AlarmManager?

我需要什麼這一次

I want to create multiple AlarmManager which call the same BroadcastReceiver Class.

有什麼辦法做到這一點的過程?

+0

什麼不同,不同時間的意思是......? – JoxTraex

+0

@JoxTraex:我刪除了該關鍵字。 –

回答

6

您可以通過爲使用的掛起的Intent設置不同的請求代碼來設置警報。確保每個鬧鐘都有唯一的請求代碼。然後用一個廣播接收器接收它們。

另一件事要記住,如果設備重新啓動,然後掛起的意圖不再存在。所以,你必須使用另一個接收器來確定設備是否重新啓動。您必須保存唯一的請求代碼,然後當設備重新啓動時,必須使用相同的請求代碼恢復您的警報。希望能幫助到你。

編輯:

廣播接收器

package com.your.package; 

import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.util.Log; 

public class AlarmReceiver extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     String Noti_title = intent.getExtras().getString("title"); 
     String Noti_message = intent.getExtras().getString("notes"); 
     int Noti_code = intent.getExtras().getInt("code"); 
     Log.d("AlarmReciever", Noti_title + " " + Noti_message); 
     Intent myIntent = new Intent(context, NotificationService.class); 
     myIntent.putExtra("title", Noti_title); 
     myIntent.putExtra("notes", Noti_message); 
     myIntent.putExtra("code", Noti_code); 
     context.startService(myIntent); 
    } 
} 

服務:

package com.your.package; 

import android.app.Notification; 
import android.app.NotificationManager; 
import android.app.PendingIntent; 
import android.app.Service; 
import android.content.Intent; 
import android.media.Ringtone; 
import android.media.RingtoneManager; 
import android.net.Uri; 
import android.os.IBinder; 

public class NotificationService extends Service { 

    private NotificationManager mManager; 

    @Override 
    public IBinder onBind(Intent arg0) { 
     // TODO Auto-generated method stub 
     return null; 
    } 

    @Override 
    public void onCreate() { 
     super.onCreate(); 
    } 

    @SuppressWarnings({ "static-access", "deprecation" }) 
    @Override 
    public void onStart(Intent intent, int startId) { 
     super.onStart(intent, startId); 

     String Noti_title = intent.getExtras().getString("title"); 
     String Noti_message = intent.getExtras().getString("notes"); 
     int Noti_Code = intent.getExtras().getInt("code"); 

     mManager = (NotificationManager) this.getApplicationContext().getSystemService(this.getApplicationContext().NOTIFICATION_SERVICE); 

     Intent intent1 = new Intent(this.getApplicationContext(), MainActivity.class); 

     Notification notification = new Notification(R.drawable.ic_launcher , Noti_title , System.currentTimeMillis()); 
     intent1.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_CLEAR_TOP); 

     PendingIntent pendingNotificationIntent = PendingIntent.getActivity(this.getApplicationContext(), 0, intent1, PendingIntent.FLAG_UPDATE_CURRENT); 
     notification.flags |= Notification.FLAG_AUTO_CANCEL; 

     notification.setLatestEventInfo(this.getApplicationContext(),Noti_title , Noti_message , pendingNotificationIntent); 
     notification.vibrate = new long[] { 100L, 100L, 200L, 500L }; 
     mManager.notify(Noti_Code , notification); 
     try { 
      Uri notification_uri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); 
      Ringtone r = RingtoneManager.getRingtone(getApplicationContext(), notification_uri); 
      r.play(); 
     } catch (Exception e) {} 
    } 

    @Override 
    public void onDestroy() { 
     // TODO Auto-generated method stub 
     super.onDestroy(); 
    } 

} 

用法:

public void SetAlarm(Calendar calendar, int reqCode) { 
     String dateName = idea.getText().toString(); 
     String dateNote = note.getText().toString(); 
     Log.d("SetAlarm Texts", "Date : " + dateName + " Note: " + dateNote); 

     Intent myIntent = new Intent(mActivity, AlarmReceiver.class); 
     myIntent.putExtra("title", "Her : " + dateName); 
     myIntent.putExtra("notes", dateNote); 
     myIntent.putExtra("code", reqCode); 
     PendingIntent pendingIntent = PendingIntent.getBroadcast(mActivity, 
       reqCode, myIntent, 0); 
     AlarmManager alarmManager = (AlarmManager) mActivity 
       .getSystemService(Context.ALARM_SERVICE); 
     alarmManager.set(AlarmManager.RTC, calendar.getTimeInMillis(), 
       pendingIntent); 
    } 
+0

好吧,我會改變請求代碼的值,並在重新啓動後也管理該值....現在,我也發送一個字符串到每個alaramManager調用的廣播接收器類,所有的時間字符串值是變化的。我如何處理它的價值? –

+0

我附上我之前完成的代碼,希望你能明白如何處理你的字符串。 – ayon

+0

@ayon發佈代碼通常並不總是回答一個問題,它更重要的是要理解這個概念,然後抓住代碼,而不是抓住代碼並忽略這個概念......另外,完整的代碼示例導致的理解比小代碼片段與小解釋。 – JoxTraex