android实现倒计时,需连接SQLite数据库,可自定义倒计时,并使用广播接收器实现倒计时结束提示的完整代码及布局xml文件
时间: 2023-12-25 08:02:45 浏览: 28
布局文件:
```xml
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/white">
<TextView
android:id="@+id/tv_countdown"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:textSize="50sp"
android:textColor="@android:color/black"
android:text="00:00:00" />
<Button
android:id="@+id/btn_set"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/tv_countdown"
android:layout_centerHorizontal="true"
android:layout_marginTop="20dp"
android:text="设置倒计时" />
</RelativeLayout>
```
代码文件:
```java
public class MainActivity extends AppCompatActivity {
private TextView tvCountdown;
private Button btnSet;
private CountDownTimer countDownTimer;
private long timeLeftInMillis;
private SQLiteDatabase database;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tvCountdown = findViewById(R.id.tv_countdown);
btnSet = findViewById(R.id.btn_set);
// 创建或打开数据库
database = SQLiteDatabase.openOrCreateDatabase(getFilesDir().getPath() + "/countdown.db", null);
// 创建倒计时表
database.execSQL("CREATE TABLE IF NOT EXISTS countdown (id INTEGER PRIMARY KEY AUTOINCREMENT, time INTEGER)");
// 设置按钮点击事件
btnSet.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
showTimePickerDialog();
}
});
}
// 显示时间选择器对话框
private void showTimePickerDialog() {
TimePickerDialog timePickerDialog = new TimePickerDialog(MainActivity.this, new TimePickerDialog.OnTimeSetListener() {
@Override
public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
startCountdown(hourOfDay, minute);
}
}, 0, 0, true);
timePickerDialog.show();
}
// 开始倒计时
private void startCountdown(int hour, int minute) {
// 计算剩余时间的毫秒数
timeLeftInMillis = (hour * 60 + minute) * 60 * 1000;
// 存储倒计时到数据库中
ContentValues values = new ContentValues();
values.put("time", timeLeftInMillis);
database.insert("countdown", null, values);
// 开始倒计时
countDownTimer = new CountDownTimer(timeLeftInMillis, 1000) {
@Override
public void onTick(long millisUntilFinished) {
timeLeftInMillis = millisUntilFinished;
updateCountdownText();
}
@Override
public void onFinish() {
showCountdownFinishedNotification();
deleteCountdownFromDatabase();
}
}.start();
}
// 更新倒计时文本
private void updateCountdownText() {
int hours = (int) (timeLeftInMillis / 1000 / 3600);
int minutes = (int) ((timeLeftInMillis / 1000) % 3600 / 60);
int seconds = (int) (timeLeftInMillis / 1000 % 60);
tvCountdown.setText(String.format("%02d:%02d:%02d", hours, minutes, seconds));
}
// 显示倒计时结束通知
private void showCountdownFinishedNotification() {
Intent intent = new Intent(MainActivity.this, MainActivity.class);
PendingIntent pendingIntent = PendingIntent.getActivity(MainActivity.this, 0, intent, 0);
NotificationCompat.Builder builder = new NotificationCompat.Builder(MainActivity.this, "default")
.setSmallIcon(R.mipmap.ic_launcher)
.setContentTitle("倒计时结束")
.setContentText("您设置的倒计时已经结束")
.setContentIntent(pendingIntent)
.setAutoCancel(true);
NotificationManagerCompat notificationManager = NotificationManagerCompat.from(MainActivity.this);
notificationManager.notify(1, builder.build());
}
// 从数据库中删除倒计时
private void deleteCountdownFromDatabase() {
database.delete("countdown", null, null);
}
@Override
protected void onResume() {
super.onResume();
// 从数据库中取出倒计时
Cursor cursor = database.rawQuery("SELECT * FROM countdown", null);
if (cursor.moveToFirst()) {
timeLeftInMillis = cursor.getLong(cursor.getColumnIndex("time"));
countDownTimer = new CountDownTimer(timeLeftInMillis, 1000) {
@Override
public void onTick(long millisUntilFinished) {
timeLeftInMillis = millisUntilFinished;
updateCountdownText();
}
@Override
public void onFinish() {
showCountdownFinishedNotification();
deleteCountdownFromDatabase();
}
}.start();
}
}
@Override
protected void onPause() {
super.onPause();
// 保存当前倒计时到数据库中
ContentValues values = new ContentValues();
values.put("time", timeLeftInMillis);
database.update("countdown", values, null, null);
// 取消倒计时
if (countDownTimer != null) {
countDownTimer.cancel();
}
}
@Override
protected void onDestroy() {
super.onDestroy();
// 关闭数据库
database.close();
}
}
```