欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

关于Android Studio制作的闹钟有时无法响铃的问题

程序员文章站 2022-03-11 21:58:30
参考网络上的一些教程制作的闹钟,为什么有时候无法响铃?辛苦大家帮忙看一下,指出一下问题。package com.example.clock3;import androidx.annotation.RequiresApi;import androidx.appcompat.app.AppCompatActivity;import android.annotation.SuppressLint;import android.app.AlarmManager;import android.app....

参考网络上的一些教程制作的闹钟,为什么有时候无法响铃?辛苦大家帮忙看一下,指出一下问题。

package com.example.clock3;

import androidx.annotation.RequiresApi;
import androidx.appcompat.app.AppCompatActivity;

import android.annotation.SuppressLint;
import android.app.AlarmManager;
import android.app.DatePickerDialog;
import android.app.PendingIntent;
import android.app.TimePickerDialog;
import android.content.Intent;
import android.os.Build;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.DatePicker;
import android.widget.TextView;
import android.widget.TimePicker;
import android.widget.Toast;

import java.util.Calendar;

public class MainActivity extends AppCompatActivity {
    private Button btnStart, btnStop;
    private TextView tvInfo;
    private PendingIntent pendingIntent;
    private AlarmManager alarmManager;
    private Calendar calendar = Calendar.getInstance();

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

        btnStart = findViewById(R.id.btnStart);
        btnStop = findViewById(R.id.btnStop);
        tvInfo = findViewById(R.id.tvInfo);
        alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);

        Intent intent = new Intent(MainActivity.this, ClockActivity.class);
        pendingIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);

        btnStart.setOnClickListener(new View.OnClickListener() {
            @RequiresApi(api = Build.VERSION_CODES.KITKAT)
            @Override
            public void onClick(View v) {

                calendar.setTimeInMillis(System.currentTimeMillis());

                final Calendar currentTime = Calendar.getInstance();//用于存放时间选择器中的默认时间(当前时间)
                new TimePickerDialog(MainActivity.this, new TimePickerDialog.OnTimeSetListener() {
                    @RequiresApi(api = Build.VERSION_CODES.KITKAT)
                    @SuppressLint("SetTextI18n")
                    @Override
                    public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
//                        long sysTime=System.currentTimeMillis();//取出当前的时间毫秒值。
                        calendar.set(Calendar.HOUR, hourOfDay);
                        calendar.set(Calendar.MINUTE, minute);
                        calendar.set(Calendar.SECOND, 0);
                        calendar.set(Calendar.MILLISECOND, 0);
//                        long selTime=calendar.getTimeInMillis();//取出设置时间的毫秒值。
//                        if(sysTime>selTime){
//                            c.add(Calendar.DAY_OF_MONTH,1);
//                        }
                        if (minute < 10) {
                            if (hourOfDay < 10) {
                                tvInfo.append("0" + hourOfDay + ":0" + minute);
                            } else {
                                tvInfo.append(hourOfDay + ":0" + minute);
                            }
                        } else {
                            if (hourOfDay < 10) {
                                tvInfo.append("0" + hourOfDay + ":" + minute);
                            } else {
                                tvInfo.append(hourOfDay + ":" + minute);
                            }
                        }
                        Toast.makeText(MainActivity.this, (int) (calendar.getTimeInMillis() / (1000 * 60)), Toast.LENGTH_LONG).show();
                    }
                }, currentTime.get(Calendar.HOUR_OF_DAY), currentTime.get(Calendar.MINUTE), true).show();

                new DatePickerDialog(MainActivity.this, new DatePickerDialog.OnDateSetListener() {
                    @RequiresApi(api = Build.VERSION_CODES.KITKAT)
                    @Override
                    public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) {
                        String text = year + "年" + (month + 1) + "月" + dayOfMonth + "日";
                        Toast.makeText(MainActivity.this, text, Toast.LENGTH_SHORT).show();
                        calendar.set(Calendar.YEAR, year);
                        calendar.set(Calendar.MONTH, month + 1);
                        calendar.set(Calendar.DAY_OF_MONTH, dayOfMonth);
                        tvInfo.setText("你设置的闹钟时间为:" + year + "年" + (month + 1) + "月" + dayOfMonth + "日");
                    }
                }
                        , currentTime.get(Calendar.YEAR)
                        , currentTime.get(Calendar.MONTH)
                        , currentTime.get(Calendar.DAY_OF_MONTH)).show();
                alarmManager.setExact(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pendingIntent);
            }
        });

        btnStop.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                alarmManager.cancel(pendingIntent);
                tvInfo.setText("你未设置闹钟");
            }
        });
    }
}

本文地址:https://blog.csdn.net/weixin_45877890/article/details/108126908

相关标签: 安卓