Search code examples
androidnotificationsbroadcastreceiver

Android Notification does not appear in BroadcastReceiver


I'm trying to create a notification after a amount of seconds entered by the user. It seems to me, that the AlarmManager and the BroadcastReceiver works fine (the Toast in onReceive() appears after the correct amount of time) but my notification does not work (it does not appear).

So what is wrong with my notification?

This is my code:

MainActivity:

package com.example.user.alarm;
import android.app.AlarmManager;
import android.app.PendingIntent;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;


public class MainActivity extends AppCompatActivity {

Button btn_set;
EditText et_time;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);


    btn_set = (Button) findViewById(R.id.setAlarmButton);
    et_time = (EditText) findViewById(R.id.edittext);

    btn_set.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

            int time = Integer.parseInt(et_time.getText().toString());

            Intent intent = new Intent(MainActivity.this, Alarm.class);
            PendingIntent pi = PendingIntent.getBroadcast(getApplicationContext(), 0, intent, 0);
            AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);
            am.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis()+time*1000, pi );

        }
    });
}
}

Alarm

package com.example.user.alarm;

import android.app.NotificationManager;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.support.v4.app.NotificationCompat;
import android.widget.Toast;



public class Alarm extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent1) {

    NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(context);
    mBuilder.setSmallIcon(R.drawable.ic_action_name);
    mBuilder.setContentTitle("Notification Alert, Click Me!");
    mBuilder.setContentText("Hi, This is Android Notification Detail!");

    NotificationManager mNotificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
    // notificationID allows you to update the notification later on.
    mNotificationManager.notify(0, mBuilder.build());

    Toast.makeText(context, "Alarm Alarm Alarm", Toast.LENGTH_SHORT).show();
}
}

Manifest

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

<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:roundIcon="@mipmap/ic_launcher_round"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">


    <activity
        android:name="com.example.user.alarm.MainActivity"
        android:label="@string/app_name">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

    <receiver android:name="com.example.user.alarm.Alarm"
        />
</application>


Solution

  • If your target API is Android O, you will need a channel id.