首页 Android开发正文

android studio开发环境下,实现一个后台计时器,时间到了,通知栏提示计时结束

欲儿 Android开发 2023-09-12 441 0

先说,该程序不用貌似不用root,因为我没有不root的设备,其次该软件不能关闭,即手机设备上查看最近任务列表的时候是可以看到的,确实不难,看一下就懂了,和iApp的代码居然很像很像


创建一个新的Android项目

打开Android Studio。

创建一个新的Android项目,取名为supertimer


创建一个后台服务类:

在你的项目中创建一个新的Java类,表示后台服务。例如,创建一个名为TimerService.java的类。

具体如何点击,在自己的包名位置右键

image.png


选择Java Class

image.png


输入类名为TimerService.java 或者不加java后缀也可以,选中class就行

 image.png




TimerService.java,除了第一行的代码保留,其余代码均复制如下代码,1秒是1000毫秒,那么测试的时候建议把60000改成3000,方便看到效果

import android.app.Notification;
import android.app.NotificationChannel;
import android.app.NotificationManager;
import android.app.Service;
import android.content.Intent;
import android.os.Build;
import android.os.CountDownTimer;
import android.os.IBinder;
import androidx.annotation.Nullable;
import androidx.core.app.NotificationCompat;

public class TimerService extends Service {

    private CountDownTimer countDownTimer;
    private static final int NOTIFICATION_ID = 1;
    private static final String CHANNEL_ID = "TimerChannel";

    @Override
    public void onCreate() {
        super.onCreate();
        createNotificationChannel();
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        startTimer();
        return START_STICKY;
    }

    private void startTimer() {
        countDownTimer = new CountDownTimer(3000, 1000) { // 60秒
            @Override
            public void onTick(long millisUntilFinished) {
                // 计时逻辑
            }

            @Override
            public void onFinish() {
                // 计时结束时发送通知
                showNotification("计时结束");
            }
        };
        countDownTimer.start();
    }

    private void createNotificationChannel() {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            NotificationChannel channel = new NotificationChannel(
                    CHANNEL_ID,
                    "Timer Channel",
                    NotificationManager.IMPORTANCE_DEFAULT
            );
            NotificationManager manager = getSystemService(NotificationManager.class);
            manager.createNotificationChannel(channel);
        }
    }

    private void showNotification(String contentText) {
        Notification notification = new NotificationCompat.Builder(this, CHANNEL_ID)
                .setSmallIcon(android.R.drawable.ic_lock_idle_alarm) // 使用系统默认的闹钟图标
                .setContentTitle("计时器")
                .setContentText(contentText)
                .build();

        NotificationManager manager = getSystemService(NotificationManager.class);
        manager.notify(NOTIFICATION_ID, notification);
    }





    @Nullable
    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }
}


在AndroidManifest.xml中注册服务:

在AndroidManifest.xml文件中添加服务的声明。在<application>标签内添加以下内容:

<service
    android:name=".TimerService"
    android:enabled="true"
    android:exported="false" />

image.png


配置权限:


在AndroidManifest.xml中确保添加了必要的权限。在<manifest>标签内添加以下内容:

<uses-permission android:name="android.permission.POST_NOTIFICATIONS" /

image.png




最后一部,在MainActivity.java中,将代码放入对应位置,其为界面载入事件,软件打开界面加载的时候会自动执行

Intent serviceIntent = new Intent(this, TimerService.class);
startService(serviceIntent);

image.png


版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

评论