5

Я пытаюсь создать уведомление в определенное время. Я создаю широковещательный приемник и вызываю его через AlarmManager. Проблема в том, что трансляция не получена и что я не получаю никаких уведомлений.Создание уведомления в определенное время через диспетчер аварийных сигналов

Регистрация приемника вещания в манифесте,

<receiver 
     android:name="com.example.android.receivers"> 
     <intent-filter> 
      <action android:name="com.example.android.receivers.AlarmReceiver" /> 
     </intent-filter> 
    </receiver> 

Это Broadcast Receiver,

public class AlarmReceiver extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context pContext, Intent pIntent) { 

//  if (pIntent.getAction().equalsIgnoreCase("")) { 
//   
//  } 
     Log.d("Alarm Receiver", "onReceive called");   
     NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(pContext).setSmallIcon(R.drawable.icon).setContentTitle("Test Notification") 
         .setContentText("Test Notification made by Syed Ahmed Hussain"); 
     Intent resultIntent = new Intent(pContext, CalendarView.class); 

     // The stack builder object will contain an artificial back stack for the 
     // started Activity. 
     // This ensures that navigating backward from the Activity leads out of 
     // your application to the Home screen. 
     TaskStackBuilder stackBuilder = TaskStackBuilder.create(pContext); 
     // Adds the back stack for the Intent (but not the Intent itself) 
     stackBuilder.addParentStack(CalendarView.class); 
     // Adds the Intent that starts the Activity to the top of the stack 
     stackBuilder.addNextIntent(resultIntent); 
     PendingIntent resultPendingIntent = stackBuilder.getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT); 
     notificationBuilder.setContentIntent(resultPendingIntent); 
     NotificationManager mNotificationManager = (NotificationManager) pContext.getSystemService(Context.NOTIFICATION_SERVICE); 
     mNotificationManager.notify(1, notificationBuilder.build()); 
    } 

} 

код от основной деятельности, который создает сигнал тревоги.

/** 
    * 
    * @param pDate 
    * @param pTime 
    */ 
    private void createNotification(String pDate, String pTime) { 
     AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE); 
     Intent intent = new Intent(this, AlarmReceiver.class); 
     PendingIntent alarmIntent = PendingIntent.getBroadcast(this, 0, intent, 0); 
//  alarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime() + 60 * 1000, alarmIntent); 
     alarmManager.set(AlarmManager.RTC_WAKEUP, Calendar.getInstance().getTimeInMillis(), alarmIntent); 
    } 

Может ли кто-нибудь указать и исправить то, что я делаю неправильно? Спасибо.

+0

не ответил ли мне ответ? – nsL

ответ

8

У вас неправильное определение приемника в вашем манифесте.

Попробуйте это:

<receiver android:name="com.example.android.receivers.AlarmReceiver" /> 

в android:name вы должны указать абсолютный пакет + класс приемника или родственник из package="com.example.android", указанных в корневом элементе манифеста. например:

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.example.android" > 

действий секции приемников указать, какие действия для прослушивания. Таким образом, вы также можете сделать это следующим образом:

Создать умысел на основе действий вместо класса

public static final String ACTION = "com.example.android.receivers.NOTIFICATION_ALARM"; 

private void createNotification(String pDate, String pTime) { 
    AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE); 
    Intent intent = new Intent(ACTION); 
    PendingIntent alarmIntent = PendingIntent.getBroadcast(this, 0, intent, 0); 
    alarmManager.set(AlarmManager.RTC_WAKEUP, Calendar.getInstance().getTimeInMillis(), alarmIntent); 
} 

Затем вы можете обрабатывать несколько действий в ресивере:

@Override 
public void onReceive(Context pContext, Intent pIntent){ 
     if (pIntent.getAction().equals(ACTION)){ 
      // Here your handle code 
     } 
} 

Но тогда , вам необходимо будет объявить ваш приемник в манифесте следующим образом:

<receiver android:name="com.example.android.receivers"> 
    <intent-filter> 
     <action android:name="com.example.android.receivers.NOTIFICATION_ALARM" /> 
    </intent-filter> 
</receiver> 

Вы, n используйте оба способа.

+0

Если честно, я до сих пор не пробовал это. – Ahmed

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