2015-12-20 2 views
2

Я пытаюсь настроить Alarm с помощью BroadcastReceiver, который вызывается при срабатывании будильника. Отработанные часы на этом, но я не могу заставить onReceive() вызываться.BroadcastReceiver onReceive() не вызывается для сигнала тревоги

Как-то это хорошо работает на API 21, но последовательно выходит из строя API 18, где я хочу, чтобы это работало.


dumpsys сигнализация

RTC_WAKEUP #2: Alarm{b1fc3710 type 0 srk.test.broadcastreceiver} 

type=0 when=-12s1ms repeatInterval=0 count=0 

operation=PendingIntent{b1afd430: PendingIntentRecord{b1fc7c28 srk.test.broadcastreceiver broadcastIntent}} 

манифеста

<application ...> 

    <uses-permission android:name="com.android.alarm.permission.SET_ALARM"/> 
     ... 
    <receiver 
     android:name="srk.test.broadcastreceiver.Receiver" 
       android:exported="true" > 
      <intent-filter> 
       <action android:name="srk.test.broadcastreceiver.alarm_intent" > 
        </action> 
      </intent-filter> 
    </receiver> 
</application> 

активность

Button button = (Button) findViewById(R.id.button); 
button.setOnClickListener(new OnClickListener() { 
    @Override 
    public void onClick(View v) { 

     Intent intent = new Intent("srk.test.broadcastreceiver.alarm_intent"); 

     PendingIntent pendingIntent = PendingIntent.getBroadcast(getApplicationContext(), 123456789, 
          intent, PendingIntent.FLAG_UPDATE_CURRENT); 

     AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE); 

     alarmManager.cancel(pendingIntent); 

     alarmManager.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + (2 * 1000), pendingIntent); 

     Log.i("SRK", "Alarm Scheduled ... "); 
     Toast.makeText(getApplicationContext(), "Alarm set", Toast.LENGTH_LONG).show(); 
    } 
}); 

приемник

открытый класс приемника расширяет BroadcastReceiver {

@Override 
public void onReceive(Context context, Intent intent) { 

    Log.i("SRK", "Alarm Triggered!"); 
    Toast.makeText(context, "Alarm Triggered!", Toast.LENGTH_LONG).show(); 

} 

Я тестирование на Android Studio на Windows, с эмулятором для Nexus 5, API 18.

I надеюсь, этого уровня детализации достаточно для воспроизведения этой проблемы. Как я могу сделать эту работу?

ответ

0

активность

 Button button = (Button) findViewById(R.id.button); 
    button.setOnClickListener(new OnClickListener() { 
    @Override 
    public void onClick(View v) { 

    Intent intent = new Intent(getActivity(), BroadcastReceiver .class); 
        String strAction = "srk.test.broadcastreceiver.alarm_intent"; 
        intent.setAction(strAction); 

    PendingIntent pendingIntent = PendingIntent.getBroadcast(getApplicationContext(), 123456789, 
         intent, 0); 

    AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE); 

    alarmManager.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + (2 * 1000), pendingIntent); 

    Log.i("SRK", "Alarm Scheduled ... "); 
    Toast.makeText(getApplicationContext(), "Alarm set", Toast.LENGTH_LONG).show(); 
} 
}); 

Ресивер

public class Receiver extends BroadcastReceiver { 

@Override 
public void onReceive(Context context, Intent intent) { 

if(intent.getAction().equals("srk.test.broadcastreceiver.alarm_intent")){ 
Log.i("SRK", "Alarm Triggered!"); 
Toast.makeText(context, "Alarm Triggered!", Toast.LENGTH_LONG).show(); 

}}} 

Вы должны установить намерения действий, как вы добавили в свой файл манифеста Попробуйте этот код будет уверен, что поможет вам

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