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

相关文章

Java中Springboot集成Kafka实现消息发送和接收功能

《Java中Springboot集成Kafka实现消息发送和接收功能》Kafka是一个高吞吐量的分布式发布-订阅消息系统,主要用于处理大规模数据流,它由生产者、消费者、主题、分区和代理等组件构成,Ka... 目录一、Kafka 简介二、Kafka 功能三、POM依赖四、配置文件五、生产者六、消费者一、Kaf

Python手搓邮件发送客户端

《Python手搓邮件发送客户端》这篇文章主要为大家详细介绍了如何使用Python手搓邮件发送客户端,支持发送邮件,附件,定时发送以及个性化邮件正文,感兴趣的可以了解下... 目录1. 简介2.主要功能2.1.邮件发送功能2.2.个性签名功能2.3.定时发送功能2. 4.附件管理2.5.配置加载功能2.6.

解决Cron定时任务中Pytest脚本无法发送邮件的问题

《解决Cron定时任务中Pytest脚本无法发送邮件的问题》文章探讨解决在Cron定时任务中运行Pytest脚本时邮件发送失败的问题,先优化环境变量,再检查Pytest邮件配置,接着配置文件确保SMT... 目录引言1. 环境变量优化:确保Cron任务可以正确执行解决方案:1.1. 创建一个脚本1.2. 修

Android数据库Room的实际使用过程总结

《Android数据库Room的实际使用过程总结》这篇文章主要给大家介绍了关于Android数据库Room的实际使用过程,详细介绍了如何创建实体类、数据访问对象(DAO)和数据库抽象类,需要的朋友可以... 目录前言一、Room的基本使用1.项目配置2.创建实体类(Entity)3.创建数据访问对象(DAO

Django中使用SMTP实现邮件发送功能

《Django中使用SMTP实现邮件发送功能》在Django中使用SMTP发送邮件是一个常见的需求,通常用于发送用户注册确认邮件、密码重置邮件等,下面我们来看看如何在Django中配置S... 目录1. 配置 Django 项目以使用 SMTP2. 创建 Django 应用3. 添加应用到项目设置4. 创建

Android WebView的加载超时处理方案

《AndroidWebView的加载超时处理方案》在Android开发中,WebView是一个常用的组件,用于在应用中嵌入网页,然而,当网络状况不佳或页面加载过慢时,用户可能会遇到加载超时的问题,本... 目录引言一、WebView加载超时的原因二、加载超时处理方案1. 使用Handler和Timer进行超

流媒体平台/视频监控/安防视频汇聚EasyCVR播放暂停后视频画面黑屏是什么原因?

视频智能分析/视频监控/安防监控综合管理系统EasyCVR视频汇聚融合平台,是TSINGSEE青犀视频垂直深耕音视频流媒体技术、AI智能技术领域的杰出成果。该平台以其强大的视频处理、汇聚与融合能力,在构建全栈视频监控系统中展现出了独特的优势。视频监控管理系统EasyCVR平台内置了强大的视频解码、转码、压缩等技术,能够处理多种视频流格式,并以多种格式(RTMP、RTSP、HTTP-FLV、WebS

Android实现任意版本设置默认的锁屏壁纸和桌面壁纸(两张壁纸可不一致)

客户有些需求需要设置默认壁纸和锁屏壁纸  在默认情况下 这两个壁纸是相同的  如果需要默认的锁屏壁纸和桌面壁纸不一样 需要额外修改 Android13实现 替换默认桌面壁纸: 将图片文件替换frameworks/base/core/res/res/drawable-nodpi/default_wallpaper.*  (注意不能是bmp格式) 替换默认锁屏壁纸: 将图片资源放入vendo

Android平台播放RTSP流的几种方案探究(VLC VS ExoPlayer VS SmartPlayer)

技术背景 好多开发者需要遴选Android平台RTSP直播播放器的时候,不知道如何选的好,本文针对常用的方案,做个大概的说明: 1. 使用VLC for Android VLC Media Player(VLC多媒体播放器),最初命名为VideoLAN客户端,是VideoLAN品牌产品,是VideoLAN计划的多媒体播放器。它支持众多音频与视频解码器及文件格式,并支持DVD影音光盘,VCD影

android-opencv-jni

//------------------start opencv--------------------@Override public void onResume(){ super.onResume(); //通过OpenCV引擎服务加载并初始化OpenCV类库,所谓OpenCV引擎服务即是 //OpenCV_2.4.3.2_Manager_2.4_*.apk程序包,存