как создать при нажатии кнопки запустить повторяющиеся уведомления с определенным интервалом времени и при нажатии кнопки остановить уведомления в Android

#java #android #android-studio #android-layout #android-notifications

#java #Android #android-studio #android-макет #android-уведомления

Вопрос:

создал приложение «Остатки воды» и застрял на нем на два дня. есть 3 кнопки на 15 минут, 30 минут, 60 минут, пользователь может нажать любую из этих кнопок, затем, нажав на кнопку запуска, приложение будет генерировать напоминания об уведомлениях («Время пить воду») каждые 15,30 или 60 минут в зависимости от выбранной кнопки. При нажатии кнопки Остановить напоминание все напоминания прекратятся. я новичок в Android, стараюсь изо всех сил и надеюсь, что сообщество stackoverflow поможет.

waterRemainder.java

 public class waterRemainder extends AppCompatActivity implements View.OnClickListener {

    Button min15, min30, min60, rstart, rstop;

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

        min15 = (Button) findViewById(R.id.min15);
        min15.setOnClickListener(this);

        min30 = (Button) findViewById(R.id.min30);
        min30.setOnClickListener(this);

        min60 = (Button) findViewById(R.id.min60);
        min60.setOnClickListener(this);

        rstart = (Button) findViewById(R.id.rstart);
        rstart.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                StartRemainder();
            }
        });

        rstop = (Button) findViewById(R.id.rstop);
        rstart.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                StopRemainder();
            }
        });
    }

    @Override
    public void onClick(View v) {

        switch (v.getId()){
            case R.id.min15:
                SetRemainder(15);
            case R.id.min30:
                SetRemainder(30);
            case R.id.min60:
                SetRemainder(60);
        }

    }

    public void SetRemainder(int minutes){

        Calendar cal = Calendar.getInstance();
        cal.add(Calendar.MINUTE,5);

    }

    public void StartRemainder(){

        NotificationCompat.Builder builder = new NotificationCompat.Builder(waterRemainder.this,"My Notification")
                .setContentTitle("New Notification")
                .setContentText("its working")
                .setSmallIcon(R.drawable.ic_message)
                .setAutoCancel(true);

    }

    public void StopRemainder(){

    }
}
 

activity_water_remainder.xml

 <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@drawable/main_header_selector"
    tools:context=".waterRemainder">
    
    <Button
        android:id="@ id/min15"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="15 Min"
        android:layout_above="@ id/min30"
        android:layout_centerHorizontal="true"
        android:layout_marginBottom="25dp"/>

    <Button
        android:id="@ id/min30"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="30 Min"
        android:layout_above="@ id/min60"
        android:layout_centerHorizontal="true"
        android:layout_marginBottom="25dp"/>
    
    <Button
        android:id="@ id/min60"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="60 Min"
        android:layout_centerInParent="true" />

    <Button
        android:id="@ id/rstart"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="STARTamp;#10;REMINDER"
        android:layout_below="@ id/min60"
        android:layout_toEndOf="@ id/min60"
        android:layout_marginStart="20dp"
        android:layout_marginTop="25dp"/>

    <Button
        android:id="@ id/rstop"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="STOPamp;#10;REMINDER"
        android:layout_below="@ id/min60"
        android:layout_toStartOf="@ id/min60"
        android:layout_marginEnd="20dp"
        android:layout_marginTop="25dp"/>
    
</RelativeLayout>
 

Ответ №1:

В функции SetRemainder выполните следующие действия:

 Timer timer=new Timer();
timer.scheduleAtFixedRate(new TimerTask() {
    @Override
    public void run() {
            //here you can show notification method 
        }
    }, delay, period);
}
 

где задержка — это время в миллисекундах до первого выполнения.. В вашем случае установите для него значение 0, а период — это промежуток времени в миллисекундах между последующими исполнениями, который в вашем случае будет переменной «минуты».

И напишите timer.cancel(); в методе остановки, чтобы отменить таймер.