首页 > 系统 > Android > 正文

Android-AlarmManager+notificationManager(闹钟+通知)的实例

2019-11-08 00:31:30
字体:
来源:转载
供稿:网友

效果图如下: 这里写图片描述 这里写图片描述

这里写图片描述

//开发手机闹钟主要用到了AlarmManager类,提供了访问系统定时服务的途径,当AlarmManager定时时间到了之后,Intent对象将会被系统广播,进而启动目标程序,进入通知类调用通知package com.example.android28_inform;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.view.View;import android.widget.TimePicker;import java.util.Calendar;/** * 闹钟 */public class MainActivity extends AppCompatActivity { PRivate AlarmManager alarmManager; private PendingIntent pendingIntent; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //实例化闹钟管理 alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE); } //设置闹钟 public void one(View view){ //获取当前系统的时间 Calendar calendar= Calendar.getInstance(); int hour=calendar.get(Calendar.HOUR_OF_DAY); int minute=calendar.get(Calendar.MINUTE); //弹出时间对话框 TimePickerDialog timePickerDialog=new TimePickerDialog(this, new TimePickerDialog.OnTimeSetListener() { @Override public void onTimeSet(TimePicker timePicker, int i, int i1) { //确定选择好的时间 Calendar c=Calendar.getInstance(); c.set(Calendar.HOUR_OF_DAY,i); c.set(Calendar.MINUTE,i1); //时间一到,执行相对应的操作 Intent intent=new Intent(); intent.setAction("com.example.android28_inform.dd"); PendingIntent pendingIntent=PendingIntent.getBroadcast(MainActivity.this,0x101,intent,0); //设置闹钟 alarmManager.set(AlarmManager.RTC_WAKEUP,c.getTimeInMillis(),pendingIntent); } },hour,minute,true); timePickerDialog.show(); } //设置周期闹钟 public void week(View view){ //获取当前系统的时间 Calendar calendar=Calendar.getInstance(); int hour=calendar.get(Calendar.HOUR_OF_DAY); int minute=calendar.get(Calendar.MINUTE); //弹出时间对话框 TimePickerDialog timePickerDialog=new TimePickerDialog(this, new TimePickerDialog.OnTimeSetListener() { @Override public void onTimeSet(TimePicker timePicker, int i, int i1) { //确定选择好的时间 Calendar c=Calendar.getInstance(); c.set(Calendar.HOUR_OF_DAY,i); c.set(Calendar.MINUTE,i1); //时间一到,执行相对应的操作 Intent intent=new Intent(); intent.setAction("com.example.android28_inform.dd"); pendingIntent = PendingIntent.getBroadcast(MainActivity.this, 0x102, intent, 0); //设置闹钟(周期) alarmManager.setRepeating(AlarmManager.RTC_WAKEUP,c.getTimeInMillis(),5000, pendingIntent); } },hour,minute,true); timePickerDialog.show(); } //取消周期闹钟 public void weekalarm(View view){ alarmManager.cancel(pendingIntent); }}package com.example.android28_inform;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.util.Log;public class InformbrocastActivity extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { if("com.example.android28_inform.dd".equals(intent.getAction())){ Log.i("test","闹钟响了"); //跳转到Activity Intent intent1=new Intent(context,InformActivity.class); //广播跳转到Activity必须给Intent设置标志位Flags //Intent的组成部分6 intent1.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(intent1); } }}package com.example.android28_inform;import android.app.Notification;import android.app.NotificationManager;import android.content.Context;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.media.MediaPlayer;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.support.v7.app.NotificationCompat;import android.view.View;/** * 通知 */public class InformActivity extends AppCompatActivity { private MediaPlayer mediaPlayer; private NotificationCompat.Builder builder; private NotificationManager notificationManager; private Notification notification; private Bitmap LargeBitmap; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_inform); //创建大图标的Bitmap LargeBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.a); //播放音乐 mediaPlayer = MediaPlayer.create(this, R.raw.a); mediaPlayer.start(); //实例化通知管理器 notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); //实例化通知 builder = new NotificationCompat.Builder(this); //收到信息后状态栏显示的文字信息 builder.setWhen(System.currentTimeMillis()); //设置小图标 builder.setSmallIcon(R.drawable.a); //设置大图标 builder.setLargeIcon(LargeBitmap); builder.setDefaults(Notification.DEFAULT_LIGHTS | Notification.DEFAULT_VIBRATE);//设置默认的三色灯与振动器 //跳到另外一个页面 builder.setContentTitle("该起床了"); builder.setSmallIcon(android.R.drawable.ic_lock_idle_alarm); builder.setContentText("不然该扣工资了"); notification = builder.build(); //增加一个进度条 builder.setProgress(100, 0, false);//初始为0 //给一个子线程 new Thread() { @Override public void run() { super.run(); for (int i = 1; i <= 150; i++) { builder.setProgress(100, i, false); notificationManager.notify(0x110, builder.build()); builder.setContentText("下载:" + i + "%"); try { //模拟下载 Thread.sleep(100); } catch (InterruptedException e) { e.printStackTrace(); } } //下载完成后更改标题以及提示信息 builder.setContentTitle("开始安装"); builder.setContentText("安装中..."); //设置进度,用于模拟安装 builder.setProgress(0,0,true); builder.build().flags=Notification.FLAG_NO_CLEAR; notificationManager.notify(0x110, builder.build()); } }.start();// //发送通知// notificationManager.notify(0x103,notification); } public void stop(View vie} ) { mediaPlayer.stop(); finish(); } }package com.example.android28_inform;import android.app.Notification;import android.app.NotificationManager;import android.content.Context;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.media.MediaPlayer;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.support.v7.app.NotificationCompat;import android.view.View;/** * 通知 */public class InformActivity extends AppCompatActivity { private MediaPlayer mediaPlayer; private NotificationCompat.Builder builder; private NotificationManager notificationManager; private Notification notification; private Bitmap LargeBitmap; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_inform); //创建大图标的Bitmap LargeBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.a); //播放音乐 mediaPlayer = MediaPlayer.create(this, R.raw.a); mediaPlayer.start(); //实例化通知管理器 notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); //实例化通知 builder = new NotificationCompat.Builder(this); //收到信息后状态栏显示的文字信息 builder.setWhen(System.currentTimeMillis()); //设置小图标 builder.setSmallIcon(R.drawable.a); //设置大图标 builder.setLargeIcon(LargeBitmap); builder.setDefaults(Notification.DEFAULT_LIGHTS );//设置默认的三色灯 //跳到另外一个页面 builder.setContentTitle("该起床了"); builder.setContentText("不然该扣工资了"); notification = builder.build(); //增加一个进度条 builder.setProgress(100, 0, false);//初始为0 //给一个子线程 new Thread() { @Override public void run() { super.run(); for (int i = 1; i <= 100; i++) { builder.setProgress(100, i, false); notificationManager.notify(0x110, builder.build()); builder.setContentText("下载:" + i + "%"); try { //下载 Thread.sleep(200); } catch (InterruptedException e) { e.printStackTrace(); } } //下载完成后更改标题以及提示信息 builder.setContentTitle("开始安装"); builder.setContentText("安装中..."); //设置进度,用于模拟安装 builder.setProgress(0,0,true); builder.build().flags=Notification.FLAG_NO_CLEAR; notificationManager.notify(0x110, notification); } }.start();// //发送通知 // notificationManager.notify(0x103,notification); } public void stop(View view) { mediaPlayer.stop(); finish(); } }
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表