android 炫酷倒计时连接数据库,并使用广播接收器的完整代码及布局xml文件
时间: 2023-12-30 09:05:15 浏览: 42
这是一个比较复杂的问题,需要用到多个技术栈和知识点,我可以给你提供一些大致的思路和代码示例,但是具体实现还需要根据你的具体需求进行调整和修改。
首先,我们需要使用一个计时器来实现倒计时的功能,这里可以使用 Android 自带的 CountDownTimer 类,具体用法可以参考官方文档。
其次,我们需要连接数据库来保存倒计时的数据,这里可以使用 Android 自带的 SQLite 数据库,具体用法可以参考官方文档。
最后,我们需要使用广播接收器来接收系统广播和自定义广播,这里可以使用 Android 自带的 BroadcastReceiver 类,具体用法可以参考官方文档。
下面是一个简单的示例代码:
activity_main.xml
```xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/tv_countdown"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="40sp"
android:layout_centerInParent="true"/>
<Button
android:id="@+id/btn_start"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Start"
android:layout_below="@id/tv_countdown"
android:layout_alignParentLeft="true"
android:layout_marginTop="20dp"/>
<Button
android:id="@+id/btn_stop"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Stop"
android:layout_below="@id/tv_countdown"
android:layout_alignParentRight="true"
android:layout_marginTop="20dp"/>
</RelativeLayout>
```
MainActivity.java
```java
public class MainActivity extends AppCompatActivity {
private TextView tvCountdown;
private Button btnStart, btnStop;
private CountDownTimer countDownTimer;
private SQLiteDatabase db;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tvCountdown = findViewById(R.id.tv_countdown);
btnStart = findViewById(R.id.btn_start);
btnStop = findViewById(R.id.btn_stop);
// 打开或创建数据库
db = openOrCreateDatabase("countdown.db", MODE_PRIVATE, null);
db.execSQL("CREATE TABLE IF NOT EXISTS countdown (id INTEGER PRIMARY KEY AUTOINCREMENT, time INTEGER)");
btnStart.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// 开始倒计时
startCountdown(60 * 1000); // 倒计时1分钟
}
});
btnStop.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// 停止倒计时
stopCountdown();
}
});
// 注册广播接收器
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(Intent.ACTION_TIME_TICK); // 系统每分钟发出的广播
intentFilter.addAction("com.example.countdown"); // 自定义广播
registerReceiver(receiver, intentFilter);
}
// 开始倒计时
private void startCountdown(long millisInFuture) {
countDownTimer = new CountDownTimer(millisInFuture, 1000) {
@Override
public void onTick(long millisUntilFinished) {
// 更新倒计时显示
tvCountdown.setText(String.format("%d:%02d", millisUntilFinished / 1000 / 60, millisUntilFinished / 1000 % 60));
// 保存倒计时剩余时间到数据库
ContentValues values = new ContentValues();
values.put("time", millisUntilFinished);
db.insert("countdown", null, values);
}
@Override
public void onFinish() {
// 倒计时结束时发送自定义广播
Intent intent = new Intent("com.example.countdown");
sendBroadcast(intent);
}
}.start();
}
// 停止倒计时
private void stopCountdown() {
if (countDownTimer != null) {
countDownTimer.cancel();
countDownTimer = null;
}
}
// 广播接收器
private BroadcastReceiver receiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
if (Intent.ACTION_TIME_TICK.equals(intent.getAction())) {
// 系统每分钟的广播,可以在这里做一些需要每分钟执行的操作
} else if ("com.example.countdown".equals(intent.getAction())) {
// 自定义广播,倒计时结束时触发
Toast.makeText(MainActivity.this, "Countdown finished", Toast.LENGTH_SHORT).show();
}
}
};
@Override
protected void onDestroy() {
super.onDestroy();
// 关闭数据库和注销广播接收器
db.close();
unregisterReceiver(receiver);
}
}
```
这里我们使用了一个简单的数据库表来保存倒计时剩余时间,每次倒计时更新时都会插入一条记录,这样就可以在倒计时结束时从数据库获取倒计时剩余时间,而不是在内存中保存,避免了一些问题。
以上是一个简单的实现思路和代码示例,具体实现还需要根据你的具体需求进行调整和修改。
相关推荐
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)