#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(); в методе остановки, чтобы отменить таймер.