Android-melding toont niet

Ik heb een programma nodig dat een melding op Android zal toevoegen. En wanneer iemand op de melding klikt, moet deze naar mijn tweede activiteit leiden.

Ik heb een code gevonden. De melding moet werken, maar om de een of andere reden werkt het niet. De Notificationwordt helemaal niet weergegeven. Ik weet niet wat ik mis.

Code van die bestanden:

Notification n = new Notification.Builder(this)
        .setContentTitle("New mail from " + "[email protected]")
        .setContentText("Subject")
        .setContentIntent(pIntent).setAutoCancel(true)
        .setStyle(new Notification.BigTextStyle().bigText(longText))
        .build();
NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
// Hide the notification after it's selected
notificationManager.notify(0, n);

1, Autoriteit 100%

De code werkt niet zonder een pictogram. Voeg dus de setSmallIconOproep toe aan de Builder-keten zoals deze om te werken:

.setSmallIcon(R.drawable.icon)

Android Oreo (8.0) en boven

Android 8 introduceerde een nieuwe vereiste van het instellen van de channelIdProperty met behulp van een NotificationChannel.

NotificationManager mNotificationManager;
NotificationCompat.Builder mBuilder =
    new NotificationCompat.Builder(mContext.getApplicationContext(), "notify_001");
Intent ii = new Intent(mContext.getApplicationContext(), RootActivity.class);
PendingIntent pendingIntent = PendingIntent.getActivity(mContext, 0, ii, 0);
NotificationCompat.BigTextStyle bigText = new NotificationCompat.BigTextStyle();
bigText.bigText(verseurl);
bigText.setBigContentTitle("Today's Bible Verse");
bigText.setSummaryText("Text in detail");
mBuilder.setContentIntent(pendingIntent);
mBuilder.setSmallIcon(R.mipmap.ic_launcher_round);
mBuilder.setContentTitle("Your Title");
mBuilder.setContentText("Your text");
mBuilder.setPriority(Notification.PRIORITY_MAX);
mBuilder.setStyle(bigText);
mNotificationManager =
    (NotificationManager) mContext.getSystemService(Context.NOTIFICATION_SERVICE);
// === Removed some obsoletes
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O)
{
    String channelId = "Your_channel_id";
    NotificationChannel channel = new NotificationChannel(
                                        channelId,
                                        "Channel human readable title",
                                        NotificationManager.IMPORTANCE_HIGH);
   mNotificationManager.createNotificationChannel(channel);
  mBuilder.setChannelId(channelId);
}
mNotificationManager.notify(0, mBuilder.build());

2, Autoriteit 13%

eigenlijk Het antwoord door ƒernando Valle lijkt niet zijn correct. Nogmaals, uw vraag is overdreven vaag omdat u niet vermeldt wat er mis is of werkt niet.

Kijkend naar uw code, ik neem aan dat de Notificationgewoon niet wordt weergegeven.

Uw melding wordt niet weergegeven, omdat u geen pictogram hebt opgegeven. Hoewel de SDK-documentatie niet vermeldt dat het vereist is, is het in feite erg veel en uw Notificationzal niet worden weergegeven zonder één.

addActionis alleen beschikbaar sinds 4.1. Voordien zou u de PendingIntentgebruiken om een ​​Activityte starten. U lijkt een PendingIntentte specificeren, zodat uw probleem elders ligt. Logisch gezien moet men concluderen dat het het ontbrekende pictogram is.


3, Autoriteit 7%

U miste het kleine pictogram.
Ik deed dezelfde fout en de bovenstaande stap heeft het opgelost.

volgens de officiële documentatie:
A melding object moet het volgende bevatten:

  1. Een klein pictogram, ingesteld door setSmallIcon()

  2. Een titel, ingesteld door setContentTitle()

  3. Detailtekst, ingesteld door setContentText()

  4. Op Android 8.0 (API-niveau 26) en hoger, een geldige meldingskanaal-ID, ingesteld door setChannelId()of opgegeven in de NotificationCompat.Builder-constructor bij het maken van een kanaal.

Zie http://developer.android.com/guide/topics /ui/notifiers/notifications.html


Antwoord 4, autoriteit 3%

Hierdoor werd ik vandaag overvallen, maar ik realiseerde me dat dit kwam omdat op Android 9.0(Pie) , verbergt Niet storenstandaard ook alle meldingen, in plaats van ze gewoon het zwijgen op te leggen zoals in Android 8.1(Oreo) en eerder. Dit geldt niet voor meldingen.

Ik vind het prettig om NST ingeschakeld te hebben voor mijn ontwikkelapparaat, dus ging ik naar de NST-instellingen en wijzigde ik de instelling om de meldingen eenvoudigweg te dempen (maar niet te verbergen), dit loste het voor mij op.


Antwoord 5, autoriteit 3%

Het maken van meldingskanalen is verplicht voor Android-versies na Android 8.1(Oreo) voor het maken van meldingen zichtbaar. Als meldingen niet zichtbaar zijn in uw app voor Oreo+ Androids, moet u de volgende functie aanroepen wanneer uw app start –

private void createNotificationChannel() {
// Create the NotificationChannel, but only on API 26+ because
// the NotificationChannel class is new and not in the support library
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
        CharSequence name = getString(R.string.channel_name);
        String description = getString(R.string.channel_description);
        int importance = NotificationManager.IMPORTANCE_DEFAULT;
        NotificationChannel channel = new NotificationChannel(CHANNEL_ID, name,
       importance);
        channel.setDescription(description);
        // Register the channel with the system; you can't change the importance
        // or other notification behaviours after this
        NotificationManager notificationManager =
        getSystemService(NotificationManager.class);
        notificationManager.createNotificationChannel(channel);
   }
}

Antwoord 6

U moet ook het build.gradle-bestand wijzigen en de gebruikte Android SDK-versie eraan toevoegen:

implementation 'com.android.support:appcompat-v7:28.0.0'

Dit werkte in mijn geval als een tierelier.


Antwoord 7

Ik denk dat je de

. bent vergeten

addAction(int icon, CharSequence title, PendingIntent intent)

Kijk hier: Actie toevoegen


Antwoord 8

Ik had het zelfde probleem met mijn Android-app. Ik probeerde uit meldingen en vond dat meldingen zijn te zien op mijn Android-emulator die een Android 7.0 rende (Nougat) systeem, terwijl deze niet actief is op mijn telefoon die had Android 8.1 (Oreo ).

Na het lezen van de documentatie, vond ik dat Android had een functie genaamd kennisgeving kanaal, zonder welke meldingen niet zal verschijnen op Oreo-apparaten. Hieronder vindt u de link naar de officiële Android documentatie over kennisgeving kanalen.


9

Meldingen kunnen niet worden weergegeven als u de meldingen tonen snel na elkaar of annuleren van een bestaande, dan meteen weer laten zien (bijvoorbeeld om een ​​heads-up-melding te activeren om de gebruiker over een wijziging mee in een doorlopend kennisgeving). In deze gevallen is het systeem kan besluiten om gewoon blokkeren de melding wanneer het voelt ze misschien worden te overweldigend / spammy voor de gebruiker.

Houd er rekening mee, dat ten minste op voorraad Android (getest met 10) vanaf de buitenkant dit gedrag ziet er een beetje willekeurig: het gewoon gebeurt soms en soms ook niet. Mijn gok is, is er een zeer korte tijd drempel waarin je niet mag te veel meldingen te verzenden. Bellen NotificationManager.cancel()en NotificationManager.notify()kan dan soms oorzaak dit gedrag.

Als u de optie, bij het bijwerken van een melding niet voordat annuleren, maar gewoon bellen NotificationManager.notify()met de bijgewerkte kennisgeving. Dit lijkt niet aan de hiervoor genoemde blokkering door het systeem te activeren.


10

Als u op versie & gt; = Android 8.1 (Oreo), terwijl het gebruik van een Notification kanaal ingesteld zijn belang naar hoog:

int importance = NotificationManager.IMPORTANCE_HIGH;
NotificationChannel channel = new NotificationChannel(CHANNEL_ID, name, importance);

11

ik een soortgelijk probleem ondervonden met de jouwe en tijdens het zoeken naar een oplossing vond ik deze antwoorden maar ze waren niet zo direct als ik hoopte dat ze zou zijn, maar het geeft een idee; Uw meldingen kan niet worden weergegeven omdat voor bepaalde uitvoeringen & gt; = 8 meldingen worden gedaan relatief anders is er een NotificationChannel, die helpt bij het beheren van meldingen dit hielp me . Gelukkig codering.

void Note(){
    //Creating a notification channel
    NotificationChannel channel=new NotificationChannel("channel1",
                                                        "hello",
                                                        NotificationManager.IMPORTANCE_HIGH);
    NotificationManager manager=(NotificationManager) getSystemService(NOTIFICATION_SERVICE);
    manager.createNotificationChannel(channel); 
    //Creating the notification object
    NotificationCompat.Builder notification=new NotificationCompat.Builder(this,"channel1");
    //notification.setAutoCancel(true);
    notification.setContentTitle("Hi this is a notification");
    notification.setContentText("Hello you");
    notification.setSmallIcon(R.drawable.ic_launcher_foreground);   
    //make the notification manager to issue a notification on the notification's channel
    manager.notify(121,notification.build());
}

Antwoord 12

Zorg ervoor dat uw notificatie-ID uniek is. Ik kon er niet achter komen waarom mijn test-push niet verscheen, maar het is omdat de meldings-ID’s werden gegenereerd op basis van de push-inhoud, en aangezien ik dezelfde melding steeds opnieuw pushte, bleef de meldings-ID hetzelfde.


Antwoord 13

val pendingIntent = PendingIntent.getActivity(applicationContext, 0, Intent(), 0)
var notification = NotificationCompat.Builder(applicationContext, CHANNEL_ID)
                                    .setContentTitle("Title")
                                    .setContentText("Text")
                                    .setSmallIcon(R.drawable.icon)
                                    .setPriority(NotificationCompat.PRIORITY_HIGH)
                                    .setContentIntent(pendingIntent)
                                    .build()
val mNotificationManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
mNotificationManager.notify(sameId, notification)

Other episodes