2015-08-05 5 views
2

У меня есть следующий код, чтобы отправить намерение:Как заставить Android BroadcastReceiver работать с AlarmManager?

 alarmMgr = (AlarmManager) getApplicationContext().getSystemService(Context.ALARM_SERVICE); 
     Intent intent = new Intent("myLog"); 
     intent.putExtra("message", new Date().toString()); 
     alarmIntent = PendingIntent.getBroadcast(this, 0, intent, 0); 

     LocalBroadcastManager.getInstance(this).sendBroadcast(intent); 
     alarmMgr.setRepeating(AlarmManager.ELAPSED_REALTIME,System.currentTimeMillis()+1000,5000,alarmIntent); 

И следующий приемник:

public class myReceiver extends BroadcastReceiver { 
    @Override public void onReceive(Context context, Intent intent) { 
     // Extract data included in the Intent 
     String message = intent.getStringExtra("message"); 
     logText.setText(logText.getText()+"\n"+message); 
    } 
} 
private BroadcastReceiver mMessageReceiver = new myReceiver(); 

Почему мои mMessageReceiver пожаров только один раз с sendBroadcast, но не получает намерения транслируемых моего alarmMgr ?

EDIT: Кроме того, это соответствующая часть моего AndroidManifest.xml файла:

<receiver android:name=".MainApp$myReceiver" > 
     <intent-filter> 
      <action android:name="com.example.*.*" /> 
     </intent-filter> 
    </receiver> 

EDIT 2: Подробнее:

@Override public void onResume() { 
    super.onResume(); 
    // Register mMessageReceiver to receive messages. 
    IntentFilter myIntentFilter = new IntentFilter(); 
    myIntentFilter.addAction("myLog"); 
    LocalBroadcastManager.getInstance(this).registerReceiver(mMessageReceiver, 
      myIntentFilter); 
} 

Это отменяет MainActivitie s onResume().

ответ

2

Хмм, я могу быть вне моей глубины здесь, но это работает для меня. Поэтому в этом случае я устанавливаю будильник (например, 10 минут или что-то еще) перед текущим временем.

// Calculate the time when it expires. 
    long wakeupTime = System.currentTimeMillis() + duration; 

    Intent myIntent = new Intent(MainActivity.this, AlarmReceiver.class); 
    PendingIntent pendingIntent = PendingIntent.getBroadcast(MainActivity.this, 0, myIntent,0); 

    AlarmManager alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE); 
    alarmManager.set(AlarmManager.RTC_WAKEUP, wakeupTime, pendingIntent); 

Это сигнализирует о выходе и пробуждении моего трансляционного приемника (AlarmReceiver). Надеюсь, это поможет, и я не отсюда.

+0

Да, я видел аналогичный код. Эта ссылка: http://stackoverflow.com/questions/4660823/android-alarm-not-working очень хорошо объясняет. Когда я копирую пасту, этот код работает, но я просто пытаюсь понять, что я делаю неправильно. – cozkul

+0

может быть из-за этой строки 'Intent intent = new Intent (« myLog »);' Your stuffing the intent с String, когда вы должны наполнить его активностью, с которой вы ее запускаете, и получателем, с которым вы хотите получить его. Например: «Intent myIntent = new Intent (MainActivity.this, AlarmReceiver.class);' – Daedalus

+0

Нет. Я уверен, что это жизнеспособно. Эта строка называется «Действие», и вы должны иметь возможность настроить приемник вещания для прослушивания определенных действий. В edit2 вы можете это увидеть. Но да, возможно, я не устанавливаю registerReceiver правильно ... – cozkul

Смежные вопросы