Action button on Notification if not clicked on certain time will do something else

Tags: , ,



I have an app that if something happens it will pop up a Notification with an action button. if it pressed it will the app running but if not for a certain amount of time it will run another code. I’m still confused about how to make that

EDIT :

Here is The code I tried Main Activity.java :

public class MainActivity extends AppCompatActivity {
    public NotificationManagerCompat notificationManager;
    public TextView mViewLabel;
    public ArrayList<Integer> lst = new ArrayList<Integer>();
    boolean continueThread = true;
    int count =0;
    Thread t;
    Timer j = new java.util.Timer();



    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        notificationManager = NotificationManagerCompat.from(this);
        mViewLabel = (TextView) findViewById(R.id.textChanger);



        t = new Thread(){
            @Override
            public void run() {
                if (continueThread) {
                    while (continueThread) {
                        lst.add(70);
                        lst.add(71);
                        lst.add(72);
                        lst.add(73);
                        lst.add(74);
                        lst.add(75);
                        try {
                            Thread.sleep(1000);
                            runOnUiThread(new Runnable() {
                                @Override
                                public void run() {
                                    Collections.shuffle(lst);
                                    mViewLabel.setText(String.valueOf(lst.get(count)));
                                }

                            });

                        }catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                        count++;

                    }
                }

            }
        };


    }
    public void BtnStart(View view){
        t.start();
        j.schedule(
                new java.util.TimerTask() {
                    @Override
                    public void run() {
                        while(continueThread){
                            if(lst.get(count) < 80){
                                sendOnChannel1();
                                break;
                            }
                            count++;
                        }
                    }
                },
                5000
        );
    }
    public void BtnStop(View view){
        if(continueThread){
            continueThread=false;
            mViewLabel.setText("0");
        }
    }
    public void BtnReset(View view){
        if(!continueThread){
           continueThread=true;
           mViewLabel.setText("Click Start To Simulate Heartbeat");
        }
    }

    public void sendOnChannel1() {
        String title = "Title";
        String message = "Testing";
        Intent activityIntent = new Intent(this, MainActivity.class);
        PendingIntent contentIntent = PendingIntent.getActivity(this,
                0, activityIntent, 0);
        Intent broadcastIntent = new Intent(this, NotificationReceiver.class);
        broadcastIntent.putExtra("toastMessage", message);
        PendingIntent actionIntent = PendingIntent.getBroadcast(this,
                0, broadcastIntent, PendingIntent.FLAG_UPDATE_CURRENT);
        Notification notification = new NotificationCompat.Builder(this, CHANNEL_1_ID)
                .setSmallIcon(R.drawable.ic_one)
                .setContentTitle(title)
                .setContentText(message)
                .setPriority(NotificationCompat.PRIORITY_HIGH)
                .setCategory(NotificationCompat.CATEGORY_MESSAGE)
                .setColor(Color.BLUE)
                .setContentIntent(contentIntent)
                .addAction(R.mipmap.ic_launcher, "Toast", actionIntent)
                .build();
        notificationManager.notify(1, notification);
    }

if something happens it will pop up a Notification with an action button is on this code

j.schedule(
                new java.util.TimerTask() {
                    @Override
                    public void run() {
                        while(continueThread){
                            if(lst.get(count) < 80){
                                sendOnChannel1();
                                break;
                            }
                            count++;
                        }
                    }
                },
                5000
        );

Answer

From your example. You could pass the current time into the intent.

So from your MainActivity.java

public void sendOnChannel1(View v) {
    String title = editTextTitle.getText().toString();
    String message = editTextMessage.getText().toString();
    Intent activityIntent = new Intent(this, MainActivity.class);
    PendingIntent contentIntent = PendingIntent.getActivity(this,
            0, activityIntent, 0);
    Intent broadcastIntent = new Intent(this, NotificationReceiver.class);
    broadcastIntent.putExtra("toastMessage", message);
    broadcastIntent.putExtra("time", Calendar.getInstance().getTimeInMillis()); //**Add here
    PendingIntent actionIntent = PendingIntent.getBroadcast(this,
            0, broadcastIntent, PendingIntent.FLAG_UPDATE_CURRENT);
    Notification notification = new NotificationCompat.Builder(this, CHANNEL_1_ID)
            .setSmallIcon(R.drawable.ic_one)
            .setContentTitle(title)
            .setContentText(message)
            .setPriority(NotificationCompat.PRIORITY_HIGH)
            .setCategory(NotificationCompat.CATEGORY_MESSAGE)
            .setColor(Color.BLUE)
            .setContentIntent(contentIntent)
            .setAutoCancel(true)
            .setOnlyAlertOnce(true)
            .addAction(R.mipmap.ic_launcher, "Toast", actionIntent)
            .build();
    notificationManager.notify(1, notification);
}

Then when you receive it within the NotificationReceiver.java Compare the date time etc.

public class NotificationReceiver extends BroadcastReceiver {

Integer TEN_MINUETS = 1000 * 60 * 10;

@Override
public void onReceive(Context context, Intent intent) {
    String message = intent.getStringExtra("toastMessage");
    long time = intent.getLongExtra("time", -1);
    if(time == -1){
        Toast.makeText(context, "Example, no time found", Toast.LENGTH_SHORT).show();
    }
    if(time + TEN_MINUETS < Calendar.getInstance().getTimeInMillis()){
        //10 minutes passed do something else
        Toast.makeText(context, message, Toast.LENGTH_SHORT).show();
        return;
    }
    //10 miuntes not passed do something more?
    Toast.makeText(context, message, Toast.LENGTH_SHORT).show();

}

}

Just make sure to check the intent has data etc.



Source: stackoverflow