1

Я пытаюсь отклонить уведомление от .addAction(), не открывая приложение. Проблема в том, что при нажатии кнопки ничего не происходит, метод onReceive() не запускается.BroadcastReceiver не получает при нажатии .addAction()

Вот код на MainActivity:

Intent notificationIntent = new Intent(mContext, MainActivity.class); 
    notificationIntent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_CLEAR_TOP); 
    notificationIntent.putExtra("id", SOMENUMBER); 
    PendingIntent pIntent = PendingIntent.getBroadcast(mContext, 0, notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT); 

    NotificationCompat.Builder notification = new NotificationCompat.Builder(mContext); 
    notification.setContentTitle(""); 
    notification.setContentText(t); 
    notification.setSmallIcon(R.mipmap.ic_launcher); 
    notification.setOngoing(true); 
    notification.addAction(R.mipmap.ic_launcher, "Dismiss", pIntent); 

    NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); 
    notificationManager.notify(SOMENUMBER, notification.build()); 

А на другом классе у меня есть приемник:

public class Notification extends BroadcastReceiver { 
    @Override 
    public void onReceive(Context context, Intent intent){ 
     NotificationManager manager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); 
     manager.cancel(intent.getIntExtra("id", 0)); 
    } 
} 

И в приемник на файл AndroidManifest.xml:

<receiver android:name=".MainActivity"> 
    <intent-filter> 
     <action android:name="io.github.seik.Notification" /> 
    </intent-filter> 
</receiver> 
+0

ли '' MainActivity' продлить Activity' или 'BroadcastReceiver '? Ваше соглашение об именах сбивает с толку :-( –

+0

@DavidWasser Нет, только класс уведомления расширяет BroadcastReceiver. –

ответ

1

Ваши соглашения об именах сбивают с толку. Android уже есть класс с именем Notification, так что вы, вероятно, не должны вызывать приемник Notification :-(

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

<activity android:name=".MainActivity"/> 

для вашего BroadcastReceiver, вам нужна манифест такой записи:

<receiver android:name=".Notification" 
    android:exported="true"/> 

Поскольку вы используете явный Intent для запуска BroadcastReceiver, вам не нужно указывать <intent-filter>. Поскольку BroadcastReceiver будет запущен NotificationManager, вам необходимо убедиться, что это exported.

Затем нужно создать PendingIntent так, что он на самом деле запускает свой BroadcastReceiver, так это изменить:

Intent notificationIntent = new Intent(mContext, MainActivity.class); 

к этому:

Intent notificationIntent = new Intent(mContext, Notification.class); 
+0

Спасибо, что это сработало !!! Я буду осторожен с именами. –