-1

I am trying to make an android reminder app. where i am trying to show notification on a particular time.

I have seen a video on youtube and followed it perfectly. yet, my code is not working. Also, android studio is showing no errors.

The problem is that notification is not showing up at all. Any help would be appreciated. Thanks in advance :)

Here is MainActivity:

package com.saipriyank.remind;

import android.app.AlarmManager;
import android.app.PendingIntent;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.TimePicker;
import android.widget.Toast;

import java.util.Calendar;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    private int nid = 1;

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

        findViewById(R.id.bt_set).setOnClickListener(this);
        findViewById(R.id.bt_cancel).setOnClickListener(this);

    }

    @Override
    public void onClick(View view) {

        EditText et = findViewById(R.id.et);
        TimePicker tp = findViewById(R.id.tp);

        Intent i = new Intent(MainActivity.this,AlarmReceiver.class);
        i.putExtra("notificationId",nid);
        i.putExtra("Todo", et.getText().toString());

        PendingIntent alarmIntent = PendingIntent.getBroadcast(MainActivity.this, 0,i,PendingIntent.FLAG_CANCEL_CURRENT);

        AlarmManager alarm = (AlarmManager) getSystemService(ALARM_SERVICE);

        switch (view.getId()){
            case R.id.bt_set:
            int hour = tp.getCurrentHour();
            int minute = tp.getCurrentMinute();


                Calendar startTime = Calendar.getInstance();
                startTime.set(Calendar.HOUR_OF_DAY,hour);
                startTime.set(Calendar.MINUTE,minute);
                startTime.set(Calendar.SECOND,0);

                long alarmStartTime = startTime.getTimeInMillis();

                alarm.set(AlarmManager.RTC_WAKEUP,alarmStartTime,alarmIntent);
                Toast.makeText(this,"Reminder has been set.",Toast.LENGTH_SHORT).show();
                break;

            case R.id.bt_cancel:
                alarm.cancel(alarmIntent);
                Toast.makeText(this,"Reminder has been cancelled.",Toast.LENGTH_SHORT).show();
                break;

        }
    }
}

Here is the AlarmReceiver.java

package com.saipriyank.remind;

import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;

public class AlarmReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {

        int nid = intent.getIntExtra("notificationID",0);
        String message = intent.getStringExtra("Todo");

        Intent mainIntent = new Intent(context,MainActivity.class);
        PendingIntent contentIntent = PendingIntent.getActivity(context,0,mainIntent,0);

        NotificationManager nm = (NotificationManager)context.getSystemService(Context.NOTIFICATION_SERVICE);

        Notification.Builder builder = new Notification.Builder(context);

        builder.setSmallIcon(R.drawable.icon)
                .setContentTitle("Reminder")
                .setContentText(message)
                .setWhen(System.currentTimeMillis())
                .setAutoCancel(true)
                .setContentIntent(contentIntent)
                .setPriority(Notification.PRIORITY_MAX)
                .setDefaults(Notification.DEFAULT_ALL);

        nm.notify(nid,builder.build());


    }
}

1 Answers1

0

You need to give the method getSystemService another argument which is a channel. define it like this then pass it to the method

public static String CHANNEL_ID = "MAIN_CHANNEL";

replace this line with yours

NotificationManager nm = (NotificationManager)context.getSystemService(Context.NOTIFICATION_SERVICE, CHANNEL_ID);

Ahmed Nabil
  • 581
  • 1
  • 7
  • 26