Android学习 您所在的位置:网站首页 如何设置每日打卡时间提醒 Android学习

Android学习

2024-07-05 15:22| 来源: 网络整理| 查看: 265

接着写每日打卡App,终于把闹钟功能实现了

核心知识是广播Broadcast和AlarmManager闹钟服务

首先,点击登录进入主界面,然后点击每日提醒

点击设置时间,

 然后,到点能弹出提醒(还未完善)

 

 代码

SetTimeActivity

package com.example.clockappliction; import static android.icu.text.DateTimePatternGenerator.DAY; import static androidx.constraintlayout.helper.widget.MotionEffect.TAG; import android.annotation.SuppressLint; import android.app.AlarmManager; import android.app.PendingIntent; import android.app.TimePickerDialog; import android.content.Intent; import android.icu.util.TimeZone; import android.os.Bundle; import android.os.SystemClock; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; import android.widget.TimePicker; import android.widget.Toast; import androidx.annotation.Nullable; import androidx.appcompat.app.AppCompatActivity; import java.util.Calendar; public class SetTimeActivity extends AppCompatActivity implements View.OnClickListener , TimePickerDialog.OnTimeSetListener { private int hour,minute; private TextView tv_time; private Button btn_send; private EditText et_remind; @SuppressLint("MissingInflatedId") @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_time_picker); tv_time = findViewById(R.id.tv_time); findViewById(R.id.btn_time).setOnClickListener(this); btn_send = (Button) findViewById(R.id.btn_send); btn_send.setOnClickListener(this); et_remind = (EditText) findViewById(R.id.et_remind); } @Override public void onClick(View view) { if (view.getId()==R.id.btn_time){ Calendar calendar = Calendar.getInstance(); TimePickerDialog dialog = new TimePickerDialog(this,this, calendar.get(Calendar.HOUR_OF_DAY), calendar.get(Calendar.MINUTE), true); dialog.show(); } else if (view.getId()==R.id.btn_send) { int hours = getHours(); int minutes =getMinute(); Intent intent = new Intent(this, AlarmReceiver.class); String mes = et_remind.getText().toString(); // intent.putExtra("mes",mes); PendingIntent sender = PendingIntent.getBroadcast(this,0, intent,PendingIntent.FLAG_MUTABLE); long firstTime = SystemClock.elapsedRealtime(); // 开机之后到现在的运行时间(包括睡眠时间) long systemTime = System.currentTimeMillis(); android.icu.util.Calendar calendar = android.icu.util.Calendar.getInstance(); calendar.setTimeInMillis(System.currentTimeMillis()); // 这里时区需要设置一下,不然会有8个小时的时间差 calendar.setTimeZone(TimeZone.getTimeZone("GMT+8")); calendar.set(android.icu.util.Calendar.MINUTE,getMinute()); calendar.set(android.icu.util.Calendar.HOUR_OF_DAY,getHours()); calendar.set(android.icu.util.Calendar.SECOND,0); calendar.set(android.icu.util.Calendar.MILLISECOND,0); // 选择的定时时间 long selectTime = calendar.getTimeInMillis(); // 如果当前时间大于设置的时间,那么就从第二天的设定时间开始 if(systemTime > selectTime) { Toast.makeText(this,"设置的时间小于当前时间", Toast.LENGTH_SHORT).show(); calendar.add(android.icu.util.Calendar.DAY_OF_MONTH,0); selectTime = calendar.getTimeInMillis(); } // 计算现在时间到设定时间的时间差 long time = selectTime - systemTime; firstTime += time; // 进行闹铃注册 AlarmManager manager = (AlarmManager)getSystemService(ALARM_SERVICE); manager.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, firstTime, DAY, sender); Log.i(TAG,"time ==== " + time +", selectTime ===== " + selectTime + ", systemTime ==== " + systemTime +", firstTime === " + firstTime); Toast.makeText(this,"设置提醒闹铃成功! ", Toast.LENGTH_LONG).show(); // Intent intent = new Intent(this,RemindActivity.class); // // intent.putExtra("t_hour",hours); // intent.putExtra("t_minute",minutes); } } @Override public void onTimeSet(TimePicker timePicker, int hours_of_day, int minute) { String desc = String.format("你选择的时间是%d时%d分",hours_of_day,minute); tv_time.setText(desc); setHours(hours_of_day); setMinute(minute); } public int getHours(){ return hour; } public int getMinute(){ return minute; } public void setHours(int hour){ this.hour=hour; } public void setMinute(int minute){ this.minute=minute; } } AlarmReceiver package com.example.clockappliction; import android.app.AlertDialog; import android.content.BroadcastReceiver; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.content.IntentFilter; import android.os.Vibrator; import android.widget.Toast; public class AlarmReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { // String message = intent.getStringExtra("mes"); Toast.makeText(context, "提醒你:", Toast.LENGTH_SHORT).show(); } }

继续加油



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有