android 设置闹钟

package com.nj.njclock;


import java.util.Calendar;


import android.annotation.SuppressLint;
import android.app.AlarmManager;
import android.app.AlertDialog;
import android.app.PendingIntent;
import android.app.TimePickerDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.text.format.Time;
import android.util.AttributeSet;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.TimePicker;


public class AlarmView extends LinearLayout {


private ListView lvAlarmList;
private Button btnAddAlarm;
private ArrayAdapter<AlarmData> adapter;
private static final String KEY_ALARM_LIST = "alarmList";
private AlarmManager alarmManager;


@SuppressLint("NewApi")
public AlarmView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
init();
}


public AlarmView(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}


public AlarmView(Context context) {
super(context);
init();
}


public void init() {
alarmManager = (AlarmManager) getContext().getSystemService(
Context.ALARM_SERVICE);
}


private void addAlarm() {
Calendar c = Calendar.getInstance();
new TimePickerDialog(getContext(),
new TimePickerDialog.OnTimeSetListener() {


@Override
public void onTimeSet(TimePicker view, int hourOfDay,
int minute) {
Calendar c = Calendar.getInstance();
c.set(Calendar.HOUR_OF_DAY, hourOfDay);
c.set(Calendar.MINUTE, minute);
c.set(Calendar.SECOND, 0);
c.set(Calendar.MILLISECOND, 0);
AlarmData ad;
if (c.getTimeInMillis() > System.currentTimeMillis()) {
// 设置时间大于当前时间
ad = new AlarmData(c.getTimeInMillis());
} else {
// 设置时间小于当前时间 日期加一天
ad = new AlarmData(
c.getTimeInMillis() + 24 * 3600 * 1000);
}
adapter.add(ad);
Intent intent = new Intent(getContext(),
AlarmReceiver.class);
PendingIntent pi = PendingIntent.getBroadcast(
getContext(), ad.getId(), intent, 0);
/*
        * 指定的任务只会执行一次,如果该pendingIntent指定的任务已经被执行过了,那么该方法直接会被cancel掉。 
        *  set(int type, long triggerAtTime, PendingIntent operation) 
        *  type 指定定时模式。 
        *  triggerAtTime 触发任务的时间。该参数和定时模式息息相关 
        *  operation 该参数指定一个广播Intent,当时间到了时,系统会广播里面的intent,触发相应的广播接收者执行某些操作,比如响铃…… 
        */ 
alarmManager.set(AlarmManager.RTC_WAKEUP, ad.getTime(), pi);
            /*
             *  通过该方法指定的任务会一直间隔执行,第三个参数就指定了执行的时间间隔 
             如果我们想取消的话,请使用:alarmManager.cancel(pendingIntent); 
             注意,这里的pendingIntent要和setRepeating方法中的一致哦。 
            
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP,ad.getTime(), 5 * 60 * 1000, pi);
 */
saveAlarmList();
}
}, c.get(Calendar.HOUR_OF_DAY), c.get(Calendar.MINUTE), true)
.show();
}


public void saveAlarmList() {
SharedPreferences sharedPreferences = getContext()
.getSharedPreferences(AlarmView.class.getName(),
Context.MODE_PRIVATE);
Editor editor = sharedPreferences.edit();
StringBuffer sb = new StringBuffer();
for (int i = 0; i < adapter.getCount(); i++) {
sb.append(adapter.getItem(i).getTime()).append(",");
}
if (sb.length() > 1) {


String content = sb.substring(0, sb.length() - 1);
editor.putString(KEY_ALARM_LIST, content);
System.out.println("-------------------------------" + content);
} else {
editor.putString(KEY_ALARM_LIST, null);
}
editor.commit();
}


private void readSavedAlarmList() {
SharedPreferences sharedPreferences = getContext()
.getSharedPreferences(AlarmView.class.getName(),
Context.MODE_PRIVATE);
String content = sharedPreferences.getString(KEY_ALARM_LIST, null);
if (content != null) {
String[] timeStrings = content.split(",");
for (String string : timeStrings) {
adapter.add(new AlarmData(Long.parseLong(string)));
}
}
}


private void deleteAlarm(int position) {


AlarmData ad = adapter.getItem(position);
adapter.remove(ad);
saveAlarmList();
alarmManager.cancel(PendingIntent.getBroadcast(getContext(),
ad.getId(), new Intent(getContext(), AlarmReceiver.class), 0));
}


@Override
protected void onFinishInflate() {
super.onFinishInflate();
btnAddAlarm = (Button) findViewById(R.id.btnAddAlarm);
lvAlarmList = (ListView) findViewById(R.id.lvAlarmList);


adapter = new ArrayAdapter<AlarmView.AlarmData>(getContext(),
android.R.layout.simple_list_item_1);
lvAlarmList.setAdapter(adapter);
readSavedAlarmList();


// adapter.add(new AlarmData(System.currentTimeMillis()));


btnAddAlarm.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
addAlarm();
saveAlarmList();
}
});


lvAlarmList
.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {


@Override
public boolean onItemLongClick(AdapterView<?> arg0,
View arg1, final int position, long id) {
AlertDialog.Builder alert = new AlertDialog.Builder(
getContext());
alert.setTitle("操作选项");
alert.setMessage("删除这个选项?");
alert.setPositiveButton("是",
new DialogInterface.OnClickListener() {


@Override
public void onClick(DialogInterface dialog,
int which) {
deleteAlarm(position);
}
});
alert.setNegativeButton("否", null);
alert.show();
return true;
}
});
}


private static class AlarmData {


private long time;
private String timeLabel;
private Time t;


public AlarmData(long time) {
this.time = time;
t = new Time();
t.set(time);
timeLabel = (t.month + 1) + "月" + t.monthDay + "日 " + t.hour + ":"
+ t.minute;
}


public long getTime() {
return time;
}


public String getTimeLabel() {
return timeLabel;
}


public int getId() {
return (int) (getTime() / 1000 / 60);
}


@Override
public String toString() {
return timeLabel;
}
}

}

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

import android.app.AlarmManager;
import android.app.PendingIntent;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;


public class AlarmReceiver extends BroadcastReceiver {


@Override
public void onReceive(Context context, Intent intent) {


System.out.println("闹钟实行----------------------------");
AlarmManager am = (AlarmManager) context
.getSystemService(Context.ALARM_SERVICE);
// 取消alarm使用AlarmManager.cancel()函数,传入参数是个PendingIntent实例。该函数会将所有跟这个PendingIntent相同的Alarm全部取消
am.cancel(PendingIntent.getBroadcast(context, getResultCode(),
new Intent(context, AlarmView.class), 0));


Intent i = new Intent(context, PlayAlarmAty.class);
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(i);
}
}

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

import android.app.Activity;
import android.media.MediaPlayer;
import android.os.Bundle;


public class PlayAlarmAty extends Activity {


private MediaPlayer mp;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.alarm_player_aty);

mp = MediaPlayer.create(this, R.raw.music);
mp.start();
}
@Override
protected void onDestroy() {
super.onDestroy();
mp.stop();
mp.release();
}
@Override
protected void onPause() {
super.onPause();
finish();
}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值