Android实现简易闹钟功能

本文实例为大家分享了Android通过广播来实现闹钟的具体代码,供大家参考,具体内容如下

1.创建广播接收RepeatingAlarm.java

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log;

public class RepeatingAlarm extends BroadcastReceiver{

  @Override
  public void onReceive(Context context, Intent intent) {
    if (intent.getAction()!=null&&intent.getAction().equals("com.gcc.alarm")) {//自定义的action
      intent = new Intent(context,AlarmActivity.class);
      intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
      context.startActivity(intent);
    }
  }
}

2.广播在Manifest.xml中配置:

<receiver
 android:name=".RepeatingAlarm"
  >
   <intent-filter >
      <action android:name="com.gcc.alarm"/>
     </intent-filter>
</receiver>

3.通过代码设置一个闹钟

Intent intent = new Intent(this, RepeatingAlarm.class);
intent.setAction("com.gcc.alarm");
PendingIntent sender = PendingIntent.getBroadcast(this, 0, intent, 0);
// Schedule the alarm!
AlarmManager am = (AlarmManager)getSystemService(ALARM_SERVICE);
          am.set(AlarmManager.RTC,
              c.getTimeInMillis(), sender);//c为设置闹钟的时间的Calendar对象

4.通过代码取消一个闹钟:

/**
 * 取消闹钟
 */
private void cancleAlarm(){
  Intent intent = new Intent(AlarmActivity.this,RepeatingAlarm.class);
  intent.setAction("com.gcc.alarm");
  PendingIntent sender = PendingIntent.getBroadcast(AlarmActivity.this, 0, intent, 0);
  // And cancel the alarm.
  AlarmManager am = (AlarmManager)getSystemService(ALARM_SERVICE);
   am.cancel(sender);//取消闹钟
  }

5.闹钟响是弹出的对化框并播放音乐用AlarmActivity.java类实现

import android.app.Activity;
import android.app.AlarmManager;
import android.app.AlertDialog;
import android.app.PendingIntent;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.res.AssetFileDescriptor;
import android.media.MediaPlayer;
import android.os.Bundle;

public class AlarmActivity extends Activity {

  MediaPlayer mp;

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.aty_alarm);
    mp = new MediaPlayer();
    AssetFileDescriptor file = getResources().openRawResourceFd(R.raw.beep);
    try {
      mp.setDataSource(file.getFileDescriptor(), file.getStartOffset(),
          file.getLength());
      mp.prepare();
      file.close();
    } catch (IOException e) {
      e.printStackTrace();
    }
    mp.setVolume(0.5f, 0.5f);
    mp.setLooping(true);
    mp.start();
    alarmOialog();
  }

  @Override
  protected void onResume() {
    super.onResume();
  }

  @Override
  protected void onDestroy() {
    super.onDestroy();
    if (mp != null) {
      if (mp.isPlaying()) {
        mp.stop();
      }
      mp.release();
    }
  }

  public void alarmOialog() {
    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setMessage("你有未处理的事件");
    builder.setPositiveButton("稍后提醒",
        new DialogInterface.OnClickListener() {

          @Override
          public void onClick(DialogInterface dialogInterface, int i) {
            alarm();
            finish();
          }
        });

    builder.setNegativeButton("停止", new DialogInterface.OnClickListener() {

      @Override
      public void onClick(DialogInterface dialogInterface, int i) {
        cancleAlarm();
        finish();// 关闭窗口
      }
    });
    builder.show().setCanceledOnTouchOutside(false);
    ;

  }

  /**
   * 取消闹钟
   */
  private void cancleAlarm() {
    // Create the same intent, and thus a matching IntentSender, for
    // the one that was scheduled.
    Intent intent = new Intent(AlarmActivity.this, RepeatingAlarm.class);
    intent.setAction("com.gcc.alarm");
    PendingIntent sender = PendingIntent.getBroadcast(AlarmActivity.this,
        0, intent, 0);

    // And cancel the alarm.
    AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);
    am.cancel(sender);
  }

  private void alarm() {
    // 获取系统的闹钟服务
    AlarmManager am = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
    // 触发闹钟的时间(毫秒)
    long triggerTime = System.currentTimeMillis() + 10000;
    Intent intent = new Intent(this, RepeatingAlarm.class);
    intent.setAction("com.gcc.alarm");
    PendingIntent op = PendingIntent.getBroadcast(this, 0, intent, 0);
    // 启动一次只会执行一次的闹钟
    am.set(AlarmManager.RTC, triggerTime, op);
    // 指定时间重复执行闹钟
    // am.setRepeating(AlarmManager.RTC,triggerTime,2000,op);
  }

}

6.注:

1.aty_alarm.xml为空布局,不需添加任何组件
2.使用MediaPlayer播放res/raw目录下音频文件的方法如下:

mp = new MediaPlayer();
    AssetFileDescriptor file = getResources().openRawResourceFd(R.raw.beep);
    try {
      mp.setDataSource(file.getFileDescriptor(), file.getStartOffset(),
          file.getLength());

7.功能不是很完善,需要的可以修改使用,闹钟时间设定可通过上篇博文来获取Calendar对象。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Android闹钟设置的解决方案

    Android设置闹钟并不像IOS那样这么简单,做过Android设置闹钟的开发者都知道里面的坑有多深.下面记录一下,我解决Android闹钟设置的解决方案. 主要问题 1.API19开始AlarmManager的机制修改. 2.应用程序被Kill掉后,设置的闹钟不响. 3.6.0以上进入Doze模式会使JobScheduler停止工作. 4.手机设置重启后,闹钟失效问题. API19以上AlarmManager机制的修改 API19之前AlarmManager提供了三个设置闹钟的方法,由于业务

  • Android闹钟机制实现定时任务功能

    Android的闹钟实现机制, 需要调用AlarmManager.set()将闹铃时间记录到系统中,当闹铃时间到后,系统会给应用程序发送广播,我们只需要去注册广播接收器就可以了. 本文分三部分讲解如何实现闹钟: 目录: 1. 设置闹铃时间; 2. 接收闹铃事件广播; 3. 重开机后重新计算并设置闹铃时间; 1. 设置闹铃时间(毫秒) private void setAlarmTime(Context context, long triggerAtMillis) { AlarmManager am

  • 简单实现Android闹钟程序 附源码

    这个应用实现了简单的闹钟功能,关闭程序的状态中也可以进行闹钟的提醒. 这里遗留了一个问题: 如果我通过应用本身关闭程序,是可以实现我上述所说的功能,但是如果我在手机进程管理中实现应用程序的关闭操作,这个提醒就不起作用了,我很疑惑的是,我通过应用程序本身关闭了后,在进程中也是查看不到这个应用了的.所以哪位知道的帮留个言指点下,谢谢. ClockDemo.java package com.example.clock; import java.util.Calendar; import android

  • Android编程闹钟设置方法详解

    本文实例讲述了Android编程闹钟设置方法.分享给大家供大家参考,具体如下: 闹钟在生活中最常见了,在Android中可以通过AlarmManager来实现闹钟,AlarmManager类专门用来设置在某个指定的时间去完成指定的时间.AlarmManager就会通过onReceive()方法去执行这些事件,就算系统处于待机状态,同样不会影响运行.可以通过Context.getSystemService方法来获得该服务.AlarmManager中的方法不少,如下: 方法 说明 Cancel 取消

  • Android自定义View 实现闹钟唤起播放闹钟铃声功能

    先上图看一下闹钟唤期页面的效果 实现的功能: 1:转动的图片根据天气情况更换 2:转动时间可以设置,转动结束,闹铃声音就结束 3:光圈颜色渐变效果 直接上代码啦: package com.yuekong.sirius.extension.customview; import android.animation.Animator; import android.animation.ValueAnimator; import android.content.Context; import andro

  • Android手机闹钟用法实例

    本文实例讲述了Android手机闹钟用法.分享给大家供大家参考.具体如下: 一.开发手机闹钟主要用到了AlarmManager类,AlarmManager类提供了访问系统定时服务的途径,开发人员可以在程序中设置某个应用程序在未来的某个时刻被执行.当AlarmManager定时时间到了之后,当初注册的Intent对象将会被系统广播,进而启动目标程序. 二.在程序运行时当需要使用AlarmManager类时,可以通过Context对象的getSystemService(Context.ALARM_S

  • Android闹钟启动时间设置无效问题的解决方法

    Android开发中,alarmManager在5.0以上系统,启动时间设置无效的问题 做一个app,需要后台保持发送心跳包.由于锁屏后CPU休眠,导致心跳包线程被挂起,所以尝试使用alarmManager定时唤醒Service发送心跳包. 以下是开启alarmManager的代码 //开启轮询服务 public static void startPollingService(Context context, int seconds, Class<?> cls,String action) {

  • android 设置闹钟及通知示例

    简单说一下这次demo内容,首先做一个设置一次性闹钟,先得到alarmManager,打开一个时间对话框,在里面设置闹钟的时间,时间一到发送广播,然后广播接受者接到跳转到新的activity播放音乐.接着是一个反复闹钟,最后是一个简单的通知,具体代码如下: import android.app.AlarmManager; import android.app.Notification; import android.app.NotificationManager; import android.

  • Android编程实现闹钟的方法详解

    本文实例讲述了Android编程实现闹钟的方法.分享给大家供大家参考,具体如下: 在Android中,有一个闹钟的类,AlarmManager类,我们可以通过其来对系统内的通知进行操作! 本文用到了Service和Broadcast两个后台管理,在处理时,曾出现过很多问题,但经过半天的努力,终于解决了! 首先是Main.xml文件: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns

  • Android编程实现PendingIntent控制多个闹钟的方法

    本文实例讲述了Android编程实现PendingIntent控制多个闹钟的方法.分享给大家供大家参考,具体如下: 要用 android.app.PendingIntent.getBroadcast(Context context, int requestCode, Intent intent)来实现控制多个闹钟,关键点在于其中的一个参数requestCode. 举例说明如下: public void setClock(){ if(lva.ids.equals("")||lva.ids

随机推荐