Android重复闹钟(每天)的实现

MainActivity如下:

package cc.cc;

import java.util.Calendar;
import java.util.Locale;
import android.os.Bundle;
import android.app.Activity;
import android.app.AlarmManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
/**
 * Demo描述:
 * 重复闹钟的实现
 *
 * 注意事项:
 * 1 因为我们是要实现的两个闹钟每天早八点和晚八点,它们是重复的.
 *   所以在PendingIntent.getBroadcast()很容易出错.导致早八点
 *   的闹钟无效.主要原因是因为该方法的第四个参数引起的.
 *   解决办法:为BroadcastReceiver设置两个action,在生成Intent
 *   的时候采用了不同的action,从而让两个闹钟都起作用.
 *   如果有更好的方式请留言指出,多谢.
 * 2 在calendar.set(Calendar.HOUR_OF_DAY, 8)方法的第二个参数
 *   表示小时,请按照24小时制式填写.不用管此时设备采用什么时间
 *   制式(12小时或24小时)
 *
 * 参考资料:
 * 1 http://blog.csdn.net/hudashi/article/details/7060837
 * 2 http://blog.csdn.net/wdaming1986/article/details/6745655
 * 3 http://blog.csdn.net/z1074971432/article/details/17532139
 *   Thank you very much
 *
 */
public class MainActivity extends Activity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		sendAlarmEveryday1(this);
		sendAlarmEveryday2(this);
	}

	private void sendAlarmEveryday1(Context context){
		AlarmManager  alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
		Calendar calendar =Calendar.getInstance(Locale.getDefault());
	    calendar.setTimeInMillis(System.currentTimeMillis());
	    calendar.set(Calendar.HOUR_OF_DAY, 8);
	    calendar.set(Calendar.MINUTE, 30);
	    calendar.set(Calendar.SECOND, 0);
	    calendar.set(Calendar.MILLISECOND, 0);

	    Intent intent = new Intent();
	    intent.setAction("testalarm0");
	    PendingIntent pendingIntent=PendingIntent.getBroadcast(context,0, intent,PendingIntent.FLAG_CANCEL_CURRENT);
	    alarmManager.setRepeating(AlarmManager.RTC_WAKEUP,calendar.getTimeInMillis(),AlarmManager.INTERVAL_DAY,pendingIntent);
	}

	private void sendAlarmEveryday2(Context context){
		AlarmManager  alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
		Calendar calendar =Calendar.getInstance(Locale.getDefault());
	    calendar.setTimeInMillis(System.currentTimeMillis());
	    calendar.set(Calendar.HOUR_OF_DAY, 20);
	    calendar.set(Calendar.MINUTE, 30);
	    calendar.set(Calendar.SECOND, 0);
	    calendar.set(Calendar.MILLISECOND, 0);

	    Intent intent = new Intent();
	    intent.setAction("testalarm1");
	    PendingIntent pendingIntent=PendingIntent.getBroadcast(context,0, intent,PendingIntent.FLAG_CANCEL_CURRENT);
	    alarmManager.setRepeating(AlarmManager.RTC_WAKEUP,calendar.getTimeInMillis(),AlarmManager.INTERVAL_DAY,pendingIntent);
	}

}

AlarmBroadcastReceiver如下:

package cc.cc;

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

public class AlarmBroadcastReceiver extends BroadcastReceiver {
	@Override
	public void onReceive(Context context, Intent intent) {
		if ("testalarm0".equals(intent.getAction())) {
			System.out.println("第一个闹钟");
		}

		if ("testalarm1".equals(intent.getAction())) {
			System.out.println("第二个闹钟");
		}

	}

}

AndroidManifest.xml如下:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="cc.cc"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="10"
        android:targetSdkVersion="10" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="cc.cc.MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <receiver android:name="cc.cc.AlarmBroadcastReceiver">
            <intent-filter >
                <action android:name="testalarm0"/>
                <action android:name="testalarm1"/>
            </intent-filter>
        </receiver>

    </application>

</manifest>

main.xml如下:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    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:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/hello_world" />

</RelativeLayout>

Android重复闹钟(每天)的实现,布布扣,bubuko.com

时间: 2024-10-10 17:35:01

Android重复闹钟(每天)的实现的相关文章

基于Android的闹钟的软件

一.本课题要求:设计一个基于Android的闹钟的软件. 实现的功能有:能通过界面设置闹钟的启动条件建立后台服务进程,当满足触发条件时,闹钟响应相应事件. 二.需求分析 该课题实现在手机操作系统Android闹钟提醒功能,携带方便,使用起来灵活.快捷.省心,是一款实用的手机软件.“手机闹钟”可以在后台运行,且能和普通闹钟一样设置多个位置闹铃,有良好的人机交互界面,可对其编辑.启用或禁用,关键在于可以自定义设置取消闹钟的操作. (1)系统体系结构包括:添加闹铃.设置时间.重复等,闹铃提醒方式,返回

Android AlarmManager闹钟实现

什么是AlarmManager? AlarmManager是Android中常用的一种系统级别的提示服务,在特定的时刻为我们广播一个指定的Intent.简单的说就是我们设定一个时间,然后在该时间到来时,AlarmManager为我们广播一个我们设定的Intent,通常我们使用 PendingIntent,PendingIntent可以理解为Intent的封装包,简单的说就是在Intent上在加个指定的动作.在使用Intent的时候,我们还需要在执行startActivity.startServi

关于Android的闹钟

Android的闹钟依赖两个组件.一个是AlarmManager一个是Calendar. 先说Calendar,Calendar是一个非常方便的时间日期管理容易,它存放了日期时间信息,并且可以以各种体位set和get. Calendar的使用可以分为以下几步 1.获得Calendar实例 Calendar calendar = Calendar.getInstance(); 2.设置或者获得日期+时间 calendar.set(Calendar.HOUR_OF_DAY,3); calendar.

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.Ala

Android重复报警调度问题

我需要在android项目中调度一个重复的报警,可能发生在任何一天,比如周一,比如每周四,或者在下一个周末. 并需要把调度的周期数据保存到数据库中. 我的问题时,我如何配置并保存,我的初步想法是使用七个位置的int数字,并根据位置判断是否需要报警. 有其他的方式吗? 处理方法 你可以存储单个字节来表示你的需要调度的周,拉用按位与运算值出来.第1位可以代表星期一,第二位 星期二,或者你可以用它来代表天的所有组合,例如: 01100000 - Saturday/Sunday (Weekend) 01

Android重复点击事件处理

用户使用Android应用的时候,会出现多次快速点击同一按钮的情况,可能会造成多余网络请求,处理方法如下: public class Util { //两次点击事件时间间隔少于1s,则认为是重复点击 private static long lastClickTime; public static boolean isFastDoubleClick() { long time = System.currentTimeMillis(); long timeD = time - lastClickTi

Android基础——闹钟

有两个活动:一个是Main,用来设定闹钟,另一个是闹钟到点提示的活动Alarm Main布局文件 <?xml version="1.0" encoding="utf-8"?> <TimePicker xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto&q

Android 画闹钟

1.今天就来模仿一下这个小闹钟的 2.思路: 先画闹钟的圆盘 ,在通过Path来画指针 两个耳朵其实就是用两个圆被一个大圆截取后留下的,并旋转一定度数后生成 3.直接上代码: 1 public class AlarmClockView extends View { 2 3 private static final PorterDuff.Mode MODE = PorterDuff.Mode.DST_OUT; 4 /** 5 * 屏幕适应性参数 6 */ 7 private static fina

android重复的文件复制APK META-INF许可证错误记录

* What went wrong:Execution failed for task ':app:transformResourcesWithMergeJavaResForDebug'.> com.android.build.api.transform.TransformException: com.android.builder.packaging.DuplicateFileException: Duplicate files copied in APK META-INF/LICENSE F