android Alarm闹钟发送广播播放音乐

2024-08-21 02:38

本文主要是介绍android Alarm闹钟发送广播播放音乐,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

通过网上的例子  自己根据相关功能修改的  如有不合理的地方  请提出来  互相学习


一共有3个类
MainActivity.java 主程序
AlarmReceiver.java 广播接收器
MusicService.java service播放音乐

MainActivity.java
package com.yqy.yqy_alarm;import java.util.Calendar;import android.app.Activity;
import android.app.AlarmManager;
import android.app.PendingIntent;
import android.app.TimePickerDialog;
import android.content.Intent;
import android.content.SharedPreferences;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.text.style.ImageSpan;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.TimePicker;public class MainActivity extends Activity {private TextView tv = null;  private Button setTime,cancelTime;  private Calendar c = null;  @Override  public void onCreate(Bundle savedInstanceState) {  super.onCreate(savedInstanceState);  setContentView(R.layout.activity_main);String alarm = getIntent().getStringExtra("alarm");if(alarm != null&&alarm.equals("alarm")){stopService(new Intent("com.yqy.yqy_alarm.MUSIC"));  }tv = (TextView)findViewById(R.id.tv);  setTime = (Button)findViewById(R.id.setAlarm);  cancelTime = (Button)findViewById(R.id.cancelAlarm);  //得到日历实例,主要是为了下面的获取时间  c = Calendar.getInstance();  setTime.setOnClickListener(new Button.OnClickListener()  {  @Override  public void onClick(View arg0) {  c.setTimeInMillis(System.currentTimeMillis());  int hour = c.get(Calendar.HOUR_OF_DAY);  int minute = c.get(Calendar.MINUTE);  new TimePickerDialog(MainActivity.this, minute, new TimePickerDialog.OnTimeSetListener() {  @Override  public void onTimeSet(TimePicker view, int hourOfDay, int minute) {  //是设置日历的时间,主要是让日历的年月日和当前同步  c.setTimeInMillis(System.currentTimeMillis());  //设置小时分钟,秒和毫秒都设置为0  c.set(Calendar.HOUR_OF_DAY, hourOfDay);  c.set(Calendar.MINUTE, minute);  c.set(Calendar.SECOND, 0);  c.set(Calendar.MILLISECOND, 0);  int requestCode = 0;//闹钟的唯一标示Intent intent = new Intent(MainActivity.this, AlarmReceiver.class);  intent.putExtra("requestCode", requestCode);PendingIntent pi = PendingIntent.getBroadcast(MainActivity.this, requestCode, intent, 0);  //得到AlarmManager实例  AlarmManager am = (AlarmManager)getSystemService(ALARM_SERVICE);  //根据当前时间预设一个警报  am.set(AlarmManager.RTC_WAKEUP, c.getTimeInMillis(), pi);  /** * 第一个参数是警报类型;第二个参数是第一次执行的延迟时间,可以延迟,也可以马上执行;第三个参数是重复周期为一天 * 这句话的意思是设置闹铃重复周期,也就是执行警报的间隔时间 */  
//                      am.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis()+(60*1000),   
//                              (24*60*60*1000), pi);  
//                        am.setRepeating(AlarmManager.RTC_WAKEUP, c.getTimeInMillis(),   
//                                1000*60*5, pi);  String msg = hourOfDay+":"+minute;  tv.setText("当前设置的闹钟时间:"+msg);  }  }, hour, minute, true).show();  //上面的TimePickerDialog中的5个参数参考:http://blog.csdn.net/yang_hui1986527/article/details/6839342  }  });  cancelTime.setOnClickListener(new Button.OnClickListener()  {  @Override  public void onClick(View v) {  Intent intent = new Intent(MainActivity.this, AlarmReceiver.class);  PendingIntent pi = PendingIntent.getBroadcast(MainActivity.this, 0,  intent, 0);  AlarmManager am = (AlarmManager)getSystemService(ALARM_SERVICE);  //取消警报  am.cancel(pi);  tv.setText("闹钟取消");  //取消闹钟的同时取消音乐  stopService(new Intent("com.yqy.yqy_alarm.MUSIC"));  }  });  }  
}  

AlarmReceiver
package com.yqy.yqy_alarm;import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.BroadcastReceiver;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.widget.Toast;public class AlarmReceiver extends BroadcastReceiver {Intent intent;int requestCode = -1;@Overridepublic void onReceive(Context context, Intent arg1) {requestCode = arg1.getIntExtra("requestCode", 0);NotificationManager nm = (NotificationManager)context.getSystemService(Context.NOTIFICATION_SERVICE);               Notification n = new Notification(R.drawable.ic_launcher, "Hello,there!", System.currentTimeMillis());             n.flags = Notification.FLAG_AUTO_CANCEL;    intent = new Intent(context, MainActivity.class);intent.putExtra("alarm", "alarm");intent.setComponent(new ComponentName("com.yqy.yqy_alarm", "com.yqy.yqy_alarm.MainActivity"));intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_NEW_TASK| Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);//关键的一步,设置启动模式PendingIntent contentIntent = PendingIntent.getActivity(context, 0,  intent, PendingIntent.FLAG_CANCEL_CURRENT);  n.setLatestEventInfo(context,"Hello,there!", "Hello,there,I'm john.", contentIntent);nm.notify(R.string.app_name, n);Toast.makeText(context, "闹钟时间到", Toast.LENGTH_SHORT).show();  intent = new Intent("com.yqy.yqy_alarm.MUSIC");//启动Service播放音乐  context.stopService(new Intent("com.yqy.yqy_alarm.MUSIC"));context.startService(intent);  }}

MusicService
package com.yqy.yqy_alarm;import android.app.Service;
import android.content.Intent;
import android.media.MediaPlayer;
import android.os.IBinder;public class MusicService extends Service {  private MediaPlayer player;  @Override  public IBinder onBind(Intent intent) {  // TODO Auto-generated method stub  return null;  }  public void onStart(Intent intent, int startId)  {  super.onStart(intent, startId);  player = MediaPlayer.create(this, R.raw.beep);  player.setLooping(true);player.start();  }  public void onDestroy()  {  super.onDestroy();  if(player != null){player.stop();      }}  }  



这篇关于android Alarm闹钟发送广播播放音乐的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1091881

相关文章

Vue3视频播放组件 vue3-video-play使用方式

《Vue3视频播放组件vue3-video-play使用方式》vue3-video-play是Vue3的视频播放组件,基于原生video标签开发,支持MP4和HLS流,提供全局/局部引入方式,可监听... 目录一、安装二、全局引入三、局部引入四、基本使用五、事件监听六、播放 HLS 流七、更多功能总结在 v

Java发送SNMP至交换机获取交换机状态实现方式

《Java发送SNMP至交换机获取交换机状态实现方式》文章介绍使用SNMP4J库(2.7.0)通过RCF1213-MIB协议获取交换机单/多路状态,需开启SNMP支持,重点对比SNMPv1、v2c、v... 目录交换机协议SNMP库获取交换机单路状态获取交换机多路状态总结交换机协议这里使用的交换机协议为常

Android实现图片浏览功能的示例详解(附带源码)

《Android实现图片浏览功能的示例详解(附带源码)》在许多应用中,都需要展示图片并支持用户进行浏览,本文主要为大家介绍了如何通过Android实现图片浏览功能,感兴趣的小伙伴可以跟随小编一起学习一... 目录一、项目背景详细介绍二、项目需求详细介绍三、相关技术详细介绍四、实现思路详细介绍五、完整实现代码

在Android中使用WebView在线查看PDF文件的方法示例

《在Android中使用WebView在线查看PDF文件的方法示例》在Android应用开发中,有时我们需要在客户端展示PDF文件,以便用户可以阅读或交互,:本文主要介绍在Android中使用We... 目录简介:1. WebView组件介绍2. 在androidManifest.XML中添加Interne

基于Python实现自动化邮件发送系统的完整指南

《基于Python实现自动化邮件发送系统的完整指南》在现代软件开发和自动化流程中,邮件通知是一个常见且实用的功能,无论是用于发送报告、告警信息还是用户提醒,通过Python实现自动化的邮件发送功能都能... 目录一、前言:二、项目概述三、配置文件 `.env` 解析四、代码结构解析1. 导入模块2. 加载环

Android协程高级用法大全

《Android协程高级用法大全》这篇文章给大家介绍Android协程高级用法大全,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友跟随小编一起学习吧... 目录1️⃣ 协程作用域(CoroutineScope)与生命周期绑定Activity/Fragment 中手

使用Python的requests库来发送HTTP请求的操作指南

《使用Python的requests库来发送HTTP请求的操作指南》使用Python的requests库发送HTTP请求是非常简单和直观的,requests库提供了丰富的API,可以发送各种类型的HT... 目录前言1. 安装 requests 库2. 发送 GET 请求3. 发送 POST 请求4. 发送

基于Python编写自动化邮件发送程序(进阶版)

《基于Python编写自动化邮件发送程序(进阶版)》在数字化时代,自动化邮件发送功能已成为企业和个人提升工作效率的重要工具,本文将使用Python编写一个简单的自动化邮件发送程序,希望对大家有所帮助... 目录理解SMTP协议基础配置开发环境构建邮件发送函数核心逻辑实现完整发送流程添加附件支持功能实现htm

Android 缓存日志Logcat导出与分析最佳实践

《Android缓存日志Logcat导出与分析最佳实践》本文全面介绍AndroidLogcat缓存日志的导出与分析方法,涵盖按进程、缓冲区类型及日志级别过滤,自动化工具使用,常见问题解决方案和最佳实... 目录android 缓存日志(Logcat)导出与分析全攻略为什么要导出缓存日志?按需过滤导出1. 按

Django开发时如何避免频繁发送短信验证码(python图文代码)

《Django开发时如何避免频繁发送短信验证码(python图文代码)》Django开发时,为防止频繁发送验证码,后端需用Redis限制请求频率,结合管道技术提升效率,通过生产者消费者模式解耦业务逻辑... 目录避免频繁发送 验证码1. www.chinasem.cn避免频繁发送 验证码逻辑分析2. 避免频繁