AlarmManager 定时提醒

Android-AlarmManager+notificationManager(闹钟+通知)的实例 效果图如下: //开发手机闹钟主要用到了AlarmManager类,提供了访问系统定时服务的途径,当AlarmManager定时时间到了之后,Intent对象将会被系统广播,进而启动目标程序,进入通知类调用通知package com.example.android28_inform;import android.app.AlarmManager; import android.app.Pend 阅读详情

之前写了一个AlarmManager+Service的轮询Demo,今天写个AlarmManager的新用法,定时器,说白了就是设置一个闹钟。
原理:设置一个定时器,到了定是时间,系统会发出广播,我们自己接收处理就OK了。
Demo:http://download.youkuaiyun.com/detail/hello_12413/8876463
效果图:
这里写图片描述

以下是代码部分:

MainActivity.java:

package com.example.alarmreceiverdemo;

import java.util.Calendar;

import android.app.Activity;
import android.app.AlarmManager;
import android.app.DatePickerDialog;
import android.app.DatePickerDialog.OnDateSetListener;
import android.app.PendingIntent;
import android.app.TimePickerDialog;
import android.app.TimePickerDialog.OnTimeSetListener;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.DatePicker;
import android.widget.TextView;
import android.widget.TimePicker;
import android.widget.Toast;

import com.example.alarmreceiverdemo.utils.DateFormatUtils;

public class MainActivity extends Activity implements OnClickListener {

    private Button setting;

    private TextView time;
    private TextView curTime;
    private StringBuilder builder;
    private PendingIntent mTimedMessagePendingIntent = null;
    private AlarmManager mAlarmManager;

    private int timedYear;
    private int timedMonth;
    private int timedDay;
    private int timedHour;
    private int timedMinute;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mAlarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);

        setting = (Button) findViewById(R.id.setting);
        time = (TextView) findViewById(R.id.time);
        curTime = (TextView) findViewById(R.id.cur);
        builder = new StringBuilder();
        setting.setOnClickListener(this);
        handler.sendEmptyMessage(0);
    }

    // 发送定时任务
    private void sendTimedMessage() {
        Intent intent = new Intent(this, AlarmReceiver.class);
        intent.setAction("alarmBroadcastReceiverAction");
        mTimedMessagePendingIntent = PendingIntent.getBroadcast(this, 0, intent, 0);
        // 设置定时时间
        Calendar calendar = Calendar.getInstance();
        calendar.set(Calendar.YEAR, timedYear);
        calendar.set(Calendar.MONTH, timedMonth);
        calendar.set(Calendar.DAY_OF_MONTH, timedDay);
        calendar.set(Calendar.HOUR_OF_DAY, timedHour);
        calendar.set(Calendar.MINUTE, timedMinute);
        if (calendar.getTimeInMillis() <= System.currentTimeMillis()) {
            Toast.makeText(this, "请重新设置时间", Toast.LENGTH_SHORT).show();
        } else {
            Toast.makeText(this, "成功设置定时时间", Toast.LENGTH_SHORT).show();
            mAlarmManager.set(AlarmManager.RTC, calendar.getTimeInMillis(), mTimedMessagePendingIntent);
        }
    }

    Handler handler = new Handler() {
        public void handleMessage(android.os.Message msg) {
            curTime.setText(DateFormatUtils.getTime());
            handler.sendEmptyMessageDelayed(0, 1 * 1000);
        };
    };

    // 日期选择器监听器
    OnDateSetListener dateSetListener = new OnDateSetListener() {

        @Override
        public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
            timedYear = year;
            timedMonth = monthOfYear;
            timedDay = dayOfMonth;
            builder.append(year);
            builder.append("-");
            builder.append(monthOfYear < 10 ? ("0" + monthOfYear) : monthOfYear);
            builder.append("-");
            builder.append(dayOfMonth < 10 ? ("0" + dayOfMonth) : dayOfMonth);
            builder.append("\t");
            showTimeDialog();
        }
    };
    // 时间选择器监听器
    // 时间选择器监听器
    OnTimeSetListener timeSetListener = new OnTimeSetListener() {

        @Override
        public void onTimeSet(TimePicker view, int hourOfDay, int minute) {

            timedHour = hourOfDay;
            timedMinute = minute;

            builder.append(hourOfDay < 10 ? ("0" + hourOfDay) : hourOfDay);
            builder.append(":");
            builder.append(minute < 10 ? ("0" + minute) : minute);
            time.setText(builder.toString());

            sendTimedMessage();
        }
    };

    // 显示日期选择器
    private void showDataDialog() {
        Calendar c = Calendar.getInstance();
        DatePickerDialog datePickerDialog = new DatePickerDialog(this, dateSetListener, c.get(Calendar.YEAR), c.get(Calendar.MONTH), c.get(Calendar.DAY_OF_MONTH));
        datePickerDialog.show();
    }

    // 显示时间选择器
    public void showTimeDialog() {
        Calendar c = Calendar.getInstance();
        TimePickerDialog timePickerDialog = new TimePickerDialog(this, timeSetListener, c.get(Calendar.HOUR_OF_DAY), c.get(Calendar.MINUTE), true);
        timePickerDialog.show();
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
        case R.id.setting:
            builder.delete(0, builder.length());
            showDataDialog();

            break;

        default:
            break;
        }
    }
}

广播接收器(记的在AndroidManifest.xml注册)

package com.example.alarmreceiverdemo;

import com.example.alarmreceiverdemo.utils.NotificationHelper;
import com.example.alarmreceiverdemo.utils.PhoneUtils;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.widget.Toast;

/**
 * @project AlarmReceiverDemo
 * @ClassName AlarmReceiver.java
 * @Description 接收广播
 * @author xugang
 * @date 2015-7-7 下午12:16:00
 */
public class AlarmReceiver extends BroadcastReceiver {

    public final static String action = "";

    @Override
    public void onReceive(Context context, Intent intent) {
        String act = intent.getAction();
        Toast.makeText(context, "定是时间到:" + act, Toast.LENGTH_SHORT).show();
        NotificationHelper.showNotification(context, PhoneUtils.getIntent(),      context.getString(R.string.app_name), "定时时间到");
    }
}

发送通知:

public class NotificationHelper {
    /**
     * 发通知
     * 
     * @param context
     * @param intent
     * @param title
     * @param content
     */
    public static void showNotification(Context context, Intent intent, String title, String content) {
        NotificationCompat.Builder mBuilder = new  NotificationCompat.Builder(context).setSmallIcon(R.drawable.ic_launcher).setContentTitle(title).setContentText(content);
        mBuilder.setWhen(System.currentTimeMillis());
        PendingIntent pendingintent = PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
        mBuilder.setContentIntent(pendingintent);
        Notification notification = mBuilder.build();
        notification.flags = Notification.FLAG_AUTO_CANCEL;
        notification.defaults |= Notification.DEFAULT_ALL;
        NotificationManager mNotificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
        // mId allows you to update the notification later on.
        mNotificationManager.notify((int) System.currentTimeMillis(), notification);
    }
}

得到打开本应用的Intent:

public static Intent getIntent() {
        Intent intent = new Intent("android.intent.action.MAIN");
        intent.addCategory("android.intent.category.LAUNCHER");
        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
        intent.setComponent(ComponentName.unflattenFromString("com.example.alarmreceiverdemo/.MainActivity"));
        return intent;
    }

Layout:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <Button
        android:id="@+id/setting"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="设置" />


    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal" >

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:padding="10dip"
            android:text="设置时间:" />

        <TextView
            android:id="@+id/time"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:padding="10dip" />
    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal" >

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:padding="10dip"
            android:text="现在时间:" />

        <TextView
            android:id="@+id/cur"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:padding="10dip" />
    </LinearLayout>

</LinearLayout>
AlarmManager定时提醒 AlarmManager定时设置提醒,发送通知 立即下载

相关推荐

Android后台运行的定时器的Demo ,AlarmManager与Service

Android 后台运行 定时器 AlarmManager Service

android 定时器 alarmmanager,Android---AlarmManager(全局定时器/闹钟)指定时长或以周期形式执行某项操作...

AlarmManager的使用机制有的称呼为全局定时器,有的称呼为闹钟。通过对它的使用,个人觉得叫全局定时器比较合适,其实它的作用和Timer有点相似。都有两种相似的用法:(1)在指定时长后执行某项操作(2)周期性的执行某项操作AlarmManager对象配合Intent使用,可以定时的开启一个Activity,发送一个BroadCast,或者开启一个Service.下面的代码详细的介绍了两种定时...

weixin_35473679的博客 1936

Android中AlarmManager+Notification实现定时通知提醒功能

AlarmManager简介 AlarmManager实质是一个全局的定时器,是Android中常用的一种系统级别的提示服务,在指定时间或周期性启动其它组件(包括Activity,Service,BroadcastReceiver)。本文将讲解一下如何使用AlarmManager实现定时提醒功能。 闹钟配置 周期闹钟 Intent intent = new Intent(); intent.setAction(GlobalValues.TIMER_ACTION_REPEATING); PendingIntent sender = PendingIntent.getBroadcast(cont

Android 开发 AlarmManager 定时器

Android 开发 AlarmManager 定时器(比较详细)

weixin_42602900的博客 1751

医学影像分割入门:为什么U-Net至今仍是肝脏CT肿瘤分割的‘首选’?

本文探讨了U-Net在肝脏CT肿瘤分割中的持久优势,分析了其轻量化设计、对称架构和跳跃连接如何完美适配医学影像的小样本、高精度需求。通过对比实验和实战建议,揭示了U-Net在肝脏肿瘤分割任务中超越新模型的根本原因,并提供了PyTorch实现和部署技巧。

weixin_38166931的博客 518

避坑指南:AUTOSAR FlashDriver操作DFlash模拟EEPROM时,你最容易忽略的5个细节

本文深入探讨了AUTOSAR FlashDriver在DFlash模拟EEPROM操作中最容易被忽视的五大细节问题,包括地址合法性检查、操作时序控制、并发访问冲突、电源稳定性管理和寿命管理。通过实际项目案例和工程化解决方案,帮助开发者避免常见陷阱,提升汽车电子控制单元(ECU)的可靠性和稳定性。

weixin_42741930的博客 247

[App] 高通系统闹钟app DeskClock的修改

系统主界面本来是4个fragment, 分别是alarm, clock, timer, stopwatch。 现在应用写不了闹钟app,我直接让他在需要闹钟的地方,跳到系统闹钟DeskClock的设置闹钟界面。 主要修改: a. 保留一个alarm界面, 去掉clock, timer, stopwatch b. 去掉了一些界面不和谐的地方 修改很简单,主要是裁剪调一些ui的功能。 上代码,可以根据ui追追流程: diff --git a/packa..

John_chaos的博客 701

宇树机器人丝滑的二人转动作背后,MPC到底是什么?

了解MPC,让我们闻“机”起舞。

Barok的博客 2145

AlarmManager详解

AlarmManager的特点 1.AlarmManager是一种系统级别的定时提示服务,这允许app在一个给定的时间段上执行某一段代码。这可以运行在app的生命周期之外。 2.一旦设置AlarmManager,它将一直调用,即使你的应用程序是不运行,甚至当你的设备是在睡眠。 3.定时任务可以唤醒你的设备,但这会消耗更多的电池。因此,你必须小心那些执行频繁的定时任务。定时任务应该

cheweilol的专栏 7147

Xilinx UltraScale+ FPGA实战:手把手教你实现USB3.0设备开发(附原理图+代码)

本文详细介绍了如何使用Xilinx UltraScale+ FPGA开发USB3.0设备,涵盖硬件设计、Vivado工程配置、Petalinux系统定制及功能测试全流程。通过实战案例和优化技巧,帮助开发者快速掌握高速数据传输实现方法,提升嵌入式系统开发效率。

weixin_29159995的博客 209

Winform从入门到精通(21)——ProgressBar(史上最全)

本介绍ProgressBar控件的详细用法,包含所有属性、事件,绝对史上最全!

qq_34059233的博客 3350

AlarmManager+Notification实现定时通知提醒功能

AlarmManager简介  AlarmManager实质是一个全局的定时器,是Android中常用的一种系统级别的提示服务,在指定时间或周期性启动其它组件(包括Activity,Service,BroadcastReceiver)。本文将讲解一下如何使用AlarmManager实现定时提醒功能。 闹钟配置周期闹钟Intent intent = new Intent(); intent.setA

LeiHolmes的博客 4162

智能车图像处理2-入门级分析1 ---基础扫线

PS :入门级文章适合新手,如果已经有基础可以去看进阶篇文章。

taiyuezyh的博客 7756

AlarmManager详解-----实现定时提醒

各位好,又几天没见了,我是一个Android菜鸟,这几天项目要做个定时提醒业务,在网上看了很多资料,大多数都是关于AlarmManager去实现(虽然我个人觉得用它去实现不够强大,和健壮,但是没办法,短时间内我找不到更好的办法,毕竟开发工作才2个月不到,Android开发的朋友如果有更好的方法请告诉我),这几天由于事前很多,没写博客对学的东西进行总结,每天下来都是空空的,感觉没学到什么东西,很是恐

everyday 3692

解锁RK3588多屏异显:MIPI+HDMI+EDP混合输出全攻略

本文详细介绍了RK3588处理器在MIPI+HDMI+EDP混合输出配置中的技术实现与应用。作为一款高性能处理器,RK3588凭借其强大的图形处理能力,支持多屏异显功能,可满足智能安防、工业控制等领域的多屏显示需求。文章从硬件连接、设备树配置、内核驱动设置到显示参数调整,系统阐述了配置流程,并针对信号不稳定、显示模式不匹配等常见问题提供了解决方案。通过智能安防监控案例,展示了该技术在提高监控效率方面的实际应用价值。随着技术进步,RK3588多屏异显技术将在更多领域发挥重要作用,为开发者提供灵活多样的显示方案

远程部署调试 运行安装 项目调试 二次开发 项目技术新 持续迭代 部分源码免费分享 2433

微信小程序 - [wxapplib]] backgroundfetch privacy fail {“errno”:101,“errMsg”:“private_getBackgroundFetchDa

微信小程序报错之backgroundfetch privacy fail,微信小程序报错WAServiceMainContext.js:1 [wxapplib]] backgroundfetch privacy fail {“errno“:101,怎么解决?问题出现:调用wx.chooseMessageFile报错(开发者工具中正常)用户隐私协议中未声明小程序使用此功能,安卓真机调试报错:backgroundfetch privacy fail ,怎么解决?微信小程序[wxapplib]] backgrou

🏆 前端领域优质创作者 1万+

App定时提醒(AlarmManager实现,适配不同版本)

本文主要介绍App定时提醒的实现方式及原理。篇幅较长,先提供demo地址。 项目Demo地址 AlarmSample App定时提醒方案探讨 方案一:利用 Handler 实现。Handler可以使用 sendEmptyMessageDelayed 来实现定时发送消息(提醒)的功能,但 sendEmptyMessageDelayed 方法是依赖于 Handler 所在的线程的,如果线程结束,就起...

狂健小夫的博客 4978

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

使用AlarmManager 多次定时提醒

实现多次定时提醒的原理是:  在添加时间点后, 需要将所添加的时间点保存在文件或数据库中。 在这里使用SharedPreferences 来保存时间点,key和value都是时间点.然后使用AlarmManager 每隔1分钟扫描一次,在扫描过程中从文件获得当前时间(时:分)的value,如果成功获得value,则说明当前时间为时间点,需要播放声音文件,否则继续扫描. 本例使用Broadcast

daozhongyang的专栏 3470

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

android 后台定时提醒(Service,AlarmManager的使用)

android 后台定时提醒(Service,AlarmManager的使用) 去发现同类优质开源项目:https://gitcode.com/ 本文档提供了一个关于如何使用Android开发后台定时提醒应用的教学资源。以下是资源文件的详细描述: 笔者在深入学习Service相关内容后,决定通过制作一个小应用来巩固所学知识。由于笔者在敲代码或玩游戏时常常忽视了时间,长时间面对电脑对眼睛造成了很大伤...

gitblog_06768的博客 436

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Android AlarmManager实现多个定时重复提醒

http://blog.csdn.net/mjook007/article/details/7990747  在移动开发中,我们经常需要实现一些定时提醒的功能,提醒功能有些定时的,像闹钟一样,有些是根据业务逻辑触发的,这里我主要说一下怎样实现多个定时提醒的实现方法。大言不惭的说下,我在做项目时遇到这个问题再中文网站没有找到任何有意义的相关文章,所以我才会在这里给广大网友分享我的经

thinkinwm的专栏 9528

Android 设置定时提醒,AlarmManager简单使用

给app设置定时提醒的功能,典型的例子有闹钟,AlarmManager是Android系统级的服务,原理相当的简单,当你设定一个时间,然后在到达时候后,系统触发一个广播,然后广播通过PendingIntent来达到最终目的。

Lajos的博客 1万+

Android通知固定,Android中AlarmManager+Notification实现定时通知提醒功能

定时通知在我们的日常生活中是非常实用的,不管是网站还是APP都将这个功能加入到项目中,这个功能之所以收到大家的喜爱,是因为可以在特定的时间提醒我们该做什么了,在生活中给大家带来了很大的便利,今天爱站技术频道带给大家Android中AlarmManager+Notification实现定时通知提醒功能。AlarmManager简介AlarmManager实质是一个全局的定时器,是Android中常用...

weixin_34486033的博客 738

android 拦截闹钟通知,AlarmManager+Notification实现定时通知提醒功能

AlarmManager简介AlarmManager实质是一个全局的定时器,是Android中常用的一种系统级别的提示服务,在指定时间或周期性启动其它组件(包括Activity,Service,BroadcastReceiver)。本文将讲解一下如何使用AlarmManager实现定时提醒功能。闹钟配置周期闹钟Intent intent = new Intent();intent.setActio...

weixin_30562977的博客 741
上一篇: ViewPager+Fragment 选项卡
下一篇: Xutils框架
hello_12413
博客等级 码龄14年 8粉丝 55原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值