Android的Notification是android系统中很重要的一个机制, 产品人员常常利用通知栏的方式,跟用户进行弱沟通。拥有推送通知的app要比没有此类功能的app活跃率要高很多。另外类似于墨迹天气,清理大师等app,也会将通知栏常驻,利用自定义的布局,方便用户及时快捷的查看所需的信息和使用快捷的功能。所以Notification的使用,也在开发当中, 使用的越来越频繁。今天我就跟大家完成这个小demo。

流程:设定时间>利用AlarmManager(闹钟管理器)通知PendingIntent跳转到指定的activity,实现闹铃跟通知。

代码如下:

activity_main.xml(设定何时通知):

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main"android:layout_width="match_parent" android:layout_height="match_parent"android:paddingBottom="@dimen/activity_vertical_margin"android:paddingLeft="@dimen/activity_horizontal_margin"android:paddingRight="@dimen/activity_horizontal_margin"android:orientation="vertical"android:paddingTop="@dimen/activity_vertical_margin"tools:context="com.example.android28_alarm_notification.MainActivity"><Button
        android:layout_width="match_parent"android:layout_height="wrap_content"android:text="闹钟一次"android:onClick="oneAlarm"/><Button
        android:layout_width="match_parent"android:layout_height="wrap_content"android:text="周期闹钟"android:onClick="periodAlarm"/><Button
        android:layout_width="match_parent"android:layout_height="wrap_content"android:text="关闭周期闹钟"android:onClick="closeAlarm"/></LinearLayout>

activity_ring.xml(闹钟的页面):

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main"android:layout_width="match_parent" android:layout_height="match_parent"android:paddingBottom="@dimen/activity_vertical_margin"android:paddingLeft="@dimen/activity_horizontal_margin"android:paddingRight="@dimen/activity_horizontal_margin"android:orientation="vertical"android:paddingTop="@dimen/activity_vertical_margin"tools:context="com.example.android28_alarm_notification.MainActivity"><Button
        android:layout_width="match_parent"android:layout_height="wrap_content"android:text="闹钟一次"android:onClick="oneAlarm"/><Button
        android:layout_width="match_parent"android:layout_height="wrap_content"android:text="周期闹钟"android:onClick="periodAlarm"/><Button
        android:layout_width="match_parent"android:layout_height="wrap_content"android:text="关闭周期闹钟"android:onClick="closeAlarm"/></LinearLayout>

MainActivity.java

package com.example.android28_alarm_notification;import android.app.AlarmManager;
import android.app.PendingIntent;
import android.app.TimePickerDialog;
import android.content.Context;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.TimePicker;import java.util.Calendar;import static android.icu.lang.UCharacter.GraphemeClusterBreak.T;public class MainActivity extends AppCompatActivity {private AlarmManager alarmManager;private PendingIntent pi;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//得到闹钟管理器alarmManager = (AlarmManager) this.getSystemService(Context.ALARM_SERVICE);}//开启单此闹钟public void oneAlarm(View view){//获得当前系统的小时跟分Calendar calendar=Calendar.getInstance();int hour=calendar.get(Calendar.HOUR_OF_DAY);//得到小时final int minue=calendar.get(Calendar.MINUTE);//得到分钟Log.i("test",hour+"....."+minue);//弹出世间对话框TimePickerDialog tpd=new TimePickerDialog(this, new TimePickerDialog.OnTimeSetListener() {@Overridepublic void onTimeSet(TimePicker view, int hourOfDay, int minute) {Calendar calendar=Calendar.getInstance();calendar.set(Calendar.HOUR_OF_DAY,hourOfDay);calendar.set(Calendar.MINUTE,minue);Intent intent=new Intent();intent.setAction("com.example.android28_alarm_notification.RING");PendingIntent pi=PendingIntent.getBroadcast(MainActivity.this,0x105,intent,0);//时间一到alarmManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(),pi);}},hour,minue,true);tpd.show();//显示窗口}//开启周期闹钟public void periodAlarm(View view){//获得当前系统的小时跟分Calendar calendar=Calendar.getInstance();int hour=calendar.get(Calendar.HOUR_OF_DAY);//得到小时final int minue=calendar.get(Calendar.MINUTE);//得到分钟//弹出世间对话框TimePickerDialog tpd=new TimePickerDialog(this, new TimePickerDialog.OnTimeSetListener() {@Overridepublic void onTimeSet(TimePicker view, int hourOfDay, int minute) {Calendar calendar=Calendar.getInstance();calendar.set(Calendar.HOUR_OF_DAY,hourOfDay);calendar.set(Calendar.MINUTE,minue);Intent intent=new Intent();intent.setAction("com.example.android28_alarm_notification.RING");pi = PendingIntent.getBroadcast(MainActivity.this,0x102,intent,0);//时间一到alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(),60*60*24*1000, pi);}},hour,minue,true);tpd.show();//显示窗口}//关闭周期闹钟public void closeAlarm(View view){alarmManager.cancel(pi);//取消周期的闹钟}
}

RingActivity.java:

package com.example.android28_alarm_notification;import android.app.Notification;
import android.app.NotificationManager;
import android.content.Context;
import android.media.MediaPlayer;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.app.NotificationCompat;
import android.view.View;import static android.R.attr.x;public class RingActivity extends AppCompatActivity {private MediaPlayer mp;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_ring);mp = MediaPlayer.create(this, R.raw.bow);mp.start();//实例化管理final   NotificationManager nm= (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);//实例化通知final   NotificationCompat.Builder nc=new NotificationCompat.Builder(this);//默认哪些特色提示nc.setDefaults(NotificationCompat.DEFAULT_ALL);//通知标题nc.setContentTitle("下载");//设置通知图片nc.setSmallIcon(android.R.drawable.ic_lock_idle_alarm);//通知内容nc.setContentText("下载中...");//得到buildNotification notification=nc.build();//发送通知nm.notify(0x110,notification);//增加一个进度条nc.setProgress(100,0,false);//初始为0//给一个子线程new Thread(){@Overridepublic void run() {super.run();//设置不可删除通知
//                nc.build().flags=Notification.FLAG_ONGOING_EVENT;for (int i=1;i<=100;i++){nc.setProgress(100,i,false);nm.notify(0x110,nc.build());nc.setContentText("下载:"+i+"%");try {//模拟下载Thread.sleep(100);} catch (InterruptedException e) {e.printStackTrace();}}//下载完成后更改标题以及提示信息nc.setContentTitle("开始安装");nc.setContentText("安装中...");//设置进度为不确定,用于模拟安装nc.setProgress(0,0,true);nc.build().flags=Notification.FLAG_NO_CLEAR;nm.notify(0x110,nc.build());}}.start();}//关闭闹钟public void stop(View view){mp.stop();finish();//干掉自己}}

#####因为这边我用的是广播通知跳转的activity,所以我这里还有一个静态的广播接收者

package com.example.android28_alarm_notification;import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log;import static android.transition.Fade.IN;/*** Created by Administrator on 2017/2/22.*/public class RingReceiver extends BroadcastReceiver {@Overridepublic void onReceive(Context context, Intent intent1) {if("com.example.android28_alarm_notification.RING".equals(intent1.getAction())){Log.i("test","收到广播了");Intent intent=new Intent(context,RingActivity.class);//广播跳activity必须设置标志位intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);//新的栈context.startActivity(intent);}}
}

清单文件 AndroidManifest.xml:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.example.android28_alarm_notification"><!--震动权限--><uses-permission android:name="android.permission.VIBRATE"></uses-permission><!--闪光权限--><uses-permission android:name="android.permission.FLASHLIGHT"></uses-permission><application
        android:allowBackup="true"android:icon="@mipmap/ic_launcher"android:label="@string/app_name"android:supportsRtl="true"android:theme="@style/AppTheme"><activity android:name=".MainActivity"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity><receiver android:name=".RingReceiver"><intent-filter><action android:name="com.example.android28_alarm_notification.RING" /></intent-filter></receiver><activity android:name=".RingActivity"></activity></application></manifest>

Android:闹钟提醒结合通知(alarm+notification)相关推荐

  1. android 闹钟提醒实现方法,Android开发实例之闹钟提醒

    本实例通过TimePickerDialog时间选择对话框让用户设置闹钟.并通过AlarmManager全局定时器在指定的时间启动闹钟Activity . 程序执行效果图: 实例代码: package ...

  2. android闹钟提醒

    在android上做出一个闹钟提醒功能http://www.apkbus.com/android-1807-1-1.html 转载于:https://www.cnblogs.com/xubuhang/ ...

  3. android提醒程序,设置Android闹钟 - 提醒应用程序

    这是MainActivity类Droidgap @SuppressLint({ "JavascriptInterface", "SetJavaScriptEnabled& ...

  4. android o preview 3,Android O Preview 之 通知渠道(Notification Channels)

    介绍 Android O 引入了 通知渠道(Notification Channels),以提供统一的系统来帮助用户管理通知,如果是针对 android O 为目标平台时,必须实现一个或者多个通知渠道 ...

  5. Android基础知识(二十):Notification、提醒式通知(横幅)踩坑与通知界面设置跳转

    Android基础知识(二十):Notification.提醒式通知(横幅)踩坑与通知界面设置跳转 一.Notification通知与基本用法 通知Notification是Android系统中比较有 ...

  6. iOS---本地推送通知UILocalNotification(可以用做类似闹钟提醒)

    转自:https://blog.csdn.net/G_eorge/article/details/50915647 正确的每周重复间隔是 NSCalendarUnitWeekOfYear! 在做项目的 ...

  7. Android 8.0 创建管理通知渠道Notification

    从Android8.0(API26)开始,所有的通知必须分配一个渠道.每一个渠道,你都可以设置渠道中所有通知的视觉和听觉行为.然后,用户能够随意修改这些设置来决定通知的行为. 在用户界面渠道显示为 & ...

  8. Android发送通知——通知栏(Notification)

    Android发送通知--通知栏(Notification) 通知是指 Android 在您应用的界面之外显示的消息,旨在向用户提供提醒.来自他人的通信信息或您应用中的其他实时信息.在发出一条通知后, ...

  9. android+记事提醒,android记事本备忘录+闹钟提醒

    [实例简介] android 记事本 备忘录 + 闹钟提醒完整代码,可直接运行 [实例截图] [核心代码] notePad └── notePad7 ├── AndroidManifest.xml ├ ...

最新文章

  1. jQuery Validate
  2. Spads 公式解析系统 - Java
  3. pandas 知识点补充:绘图plot
  4. gen_caltab生成标定文件
  5. 研发协同平台数据库死锁处理及改进
  6. UVALive 4764 dp
  7. 杭电oj首字母变大写
  8. 01_ExtJS_HelloWorld
  9. 一个好的公司网站应怎么样去推广
  10. 未来标准化、低风险的P2P模式
  11. 东大14春学期《计算机应用基础》在线作业1,东大18春学期《计算机应用基础》在线作业...
  12. 过滤Filtering
  13. 如何实现服务器启动自动创建日志
  14. Delphi XE +SQLServer把图片当作文本存储
  15. android 播放器 对比,播放器哪个最好用(五款最强播放器最全对比)
  16. ubuntu终端英文乱码问题
  17. win7桌面上计算机图标名称怎么改,win7电脑桌面图标排列方式如何设置 win7电脑桌面图标排列方法...
  18. Redis docker安装及redis.conf配置文件解析
  19. 为什么Excel表格只有部分单元格可编辑?
  20. 工频风力发电储能逆变电路中的电流检测(霍尔电流传感器ACS712/CH701应用案例)

热门文章

  1. android 点击屏幕其它地方隐藏输入法
  2. 会计基础-资本与资本公积核算
  3. 使用Seq2seq框架搭建对联生成系统
  4. 老鼠出迷宫问题(递归问题)
  5. 服务器3D场景建模(二):Physx与PVD
  6. 概率论笔记4.2.1方差
  7. 了解快应用 — 郭宇
  8. 公式编写1000问36-37
  9. LCP 30.魔塔游戏
  10. Datawhale Pandas task10 时序数据