1、AlarmReceiver
package com.holy.hook.alarmclock; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.database.Cursor; import android.media.MediaPlayer; import android.text.format.Time; public class AlarmReciever extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { // TODO Auto-generated method stub DatabaseHelper dbHelper = new DatabaseHelper(context); Time currentTime = new Time(); currentTime.setToNow(); int day = currentTime.weekDay; String hour = "" + currentTime.hour; String minute = "" + currentTime.minute; Cursor myCursor = dbHelper.select(); for (myCursor.moveToFirst();!myCursor.isAfterLast();myCursor.moveToNext()) { if ((myCursor.getInt(Constant.DBColumnName.COLUMN_REPEAT_START+day)==1)&& (hour.equals(myCursor.getString(Constant.DBColumnName.COLUMN_HOUR)))&& (minute.equals(myCursor.getString(Constant.DBColumnName.COLUMN_MINUTE)))) { MediaPlayer mp = MediaPlayer.create(context, R.raw.ring); mp.start(); break; } } } }
2、DatabaseOPenHelper
package com.holy.hook.alarmclock; import android.content.ContentValues; import android.content.Context; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteDatabase.CursorFactory; import android.database.sqlite.SQLiteOpenHelper; public class DatabaseHelper extends SQLiteOpenHelper { private static final String DATABASE_NAME = "alarm_db"; private static final String TABLE_NAME = "alarm_time"; private static final int DATABASE_VERSION = 1; private static final String FIELD_ID = "_id"; private String[] days = new String[]{"_monday", "_tuesday", "_wednesday", "_thursday", "_friday", "_saturday", "_sunday"}; public DatabaseHelper(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); } public DatabaseHelper(Context context, String name, CursorFactory factory, int version) { super(context, name, factory, version); // TODO Auto-generated constructor stub } @Override public void onCreate(SQLiteDatabase db) { // TODO Auto-generated method stub String sql = "Create table " + TABLE_NAME + "(" + FIELD_ID + " integer primary key autoincrement" + ",_hour" + " text" + ",_minute" + " text"; for (int i = 0; i < days.length; i++) { sql += (","+days[i]+" integer"); } sql += ")"; db.execSQL(sql); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { // TODO Auto-generated method stub String sql=" DROP TABLE IF EXISTS "+TABLE_NAME; db.execSQL(sql); onCreate(db); } public Cursor select() { SQLiteDatabase db=this.getReadableDatabase(); Cursor cursor=db.query(TABLE_NAME, null, null, null, null, null, " _id desc"); return cursor; } public Cursor selectById(int id) { SQLiteDatabase db=this.getReadableDatabase(); Cursor cursor=db.query(TABLE_NAME, null, FIELD_ID+"=?", new String[]{""+id}, null, null, " _id desc"); return cursor; } public long insert(AlarmTime alarmTime) { SQLiteDatabase db=this.getWritableDatabase(); ContentValues cv=new ContentValues(); cv.put("_hour", alarmTime.getHour()); cv.put("_minute", alarmTime.getMinute()); for (int i = 0; i < alarmTime.getEnableDays().length; i++) { cv.put(days[i], alarmTime.getEnableDays()[i]); } long row=db.insert(TABLE_NAME, null, cv); return row; } public void delete(int id) { SQLiteDatabase db=this.getWritableDatabase(); String where=FIELD_ID+"=?"; String[] whereValue={Integer.toString(id)}; db.delete(TABLE_NAME, where, whereValue); } public void update(int id,AlarmTime alarmTime) { SQLiteDatabase db=this.getWritableDatabase(); String where=FIELD_ID+"=?"; String[] whereValue={Integer.toString(id)}; ContentValues cv=new ContentValues(); cv.put("_hour", alarmTime.getHour()); cv.put("_minute", alarmTime.getMinute()); for (int i = 0; i < alarmTime.getEnableDays().length; i++) { cv.put(days[i], alarmTime.getEnableDays()[i]); } db.update(TABLE_NAME, cv, where, whereValue); } public AlarmTime getAlarmTime(Cursor cursor) { cursor.moveToFirst(); AlarmTime alarmTime = new AlarmTime(); alarmTime.set_id(cursor.getInt(Constant.DBColumnName.COLUMN_ID)); alarmTime.setHour(cursor.getString(Constant.DBColumnName.COLUMN_HOUR)); alarmTime.setMinute(cursor.getString(Constant.DBColumnName.COLUMN_MINUTE)); int[] enableDays = new int[]{0, 0, 0, 0, 0, 0, 0}; for (int i = 0; i < enableDays.length; i++) { enableDays[i]=cursor.getInt(Constant.DBColumnName.COLUMN_REPEAT_START + i); } alarmTime.setEnableDays(enableDays); return alarmTime; } }
3、MainActivity
package com.holy.hook.alarmclock; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import android.app.Activity; import android.app.AlarmManager; import android.app.PendingIntent; import android.content.Context; import android.content.Intent; import android.database.Cursor; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.Button; import android.widget.ListView; import android.widget.SimpleAdapter; public class MainActivity extends Activity implements OnClickListener, OnItemClickListener { DatabaseHelper dbHelper; Cursor myCursor; private String[] enableDaysName =new String[]{"周一", "周二", "周三", "周四", "周五", "周六", "周日"}; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); dbHelper = new DatabaseHelper(this); Button btnAddAlarm = (Button)findViewById(R.id.btnAddAlarm); btnAddAlarm.setOnClickListener(this); showList(); bindAlarm(); } public void onClick(View v) { // TODO Auto-generated method stub switch (v.getId()) { case R.id.btnAddAlarm: { Intent editIntent = new Intent(this, EditActivity.class); startActivity(editIntent); break; } default: { break; } } } private List<Map<String, Object>> getData() { List<Map<String, Object>> list = new ArrayList<Map<String, Object>>(); Map<String, Object> map = null; myCursor = dbHelper.select(); for (myCursor.moveToFirst();!myCursor.isAfterLast();myCursor.moveToNext()) { map = new HashMap<String, Object>(); String timeStr = myCursor.getString(Constant.DBColumnName.COLUMN_HOUR) + ":" + myCursor.getString(Constant.DBColumnName.COLUMN_MINUTE); String repeatStr = ""; for (int i = 0; i < enableDaysName.length; i++) { if (myCursor.getInt(Constant.DBColumnName.COLUMN_REPEAT_START + i) == 1) { if ("".equals(repeatStr)) { repeatStr += enableDaysName[i]; } else { repeatStr += (", "+enableDaysName[i]); } } } map.put("_id", myCursor.getInt(Constant.DBColumnName.COLUMN_ID)+""); map.put("time", timeStr); map.put("repeat", repeatStr); list.add(map); } return list; } public void onItemClick(AdapterView<?> parent, View view, int position, long id) { // TODO Auto-generated method stub ListView listView = (ListView)parent; HashMap<String, String> map = (HashMap<String, String>) listView.getItemAtPosition(position); Intent intent = new Intent(this, EditActivity.class); intent.putExtra("_id", Integer.parseInt(map.get("_id"))); startActivity(intent); } @Override protected void onRestart() { // TODO Auto-generated method stub super.onRestart(); showList(); bindAlarm(); } private void showList() { ListView lvAlarmTime = (ListView)findViewById(R.id.lvAlarmTime); SimpleAdapter adapter = new SimpleAdapter(this, getData(), R.layout.icon_text_view, new String[]{"_id", "time", "repeat"}, new int[]{R.id._id, R.id.timeValue, R.id.repeatValue}); lvAlarmTime.setAdapter(adapter); lvAlarmTime.setOnItemClickListener(this); } private void bindAlarm() { AlarmManager alarmManager = (AlarmManager)getSystemService(Context.ALARM_SERVICE); Intent intent = new Intent(this, AlarmReciever.class); PendingIntent pIntent = PendingIntent.getService(this, 0, intent, 0); alarmManager.setRepeating(AlarmManager.RTC, 0, 60*1000, pIntent); } }
EditActivity
package com.holy.hook.alarmclock; import android.app.Activity; import android.app.AlertDialog; import android.content.DialogInterface; import android.content.Intent; import android.database.Cursor; import android.os.Bundle; import android.text.format.Time; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.LinearLayout; import android.widget.TextView; import android.widget.TimePicker; public class EditActivity extends Activity implements OnClickListener { private DatabaseHelper dbHelper; private Cursor cursor; private int alarmId; private AlarmTime alarmTime = new AlarmTime(); private String[] enableDaysName =new String[]{"周一", "周二", "周三", "周四", "周五", "周六", "周日"}; boolean[] flags=new boolean[]{false,false,false,false,false,false,false}; private Button btnOK, btnDelete; private TextView tvTimeValue, tvRepeatValue; @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.edit); LinearLayout timeEditRegion = (LinearLayout)findViewById(R.id.timeEdit); timeEditRegion.setOnClickListener(this); tvTimeValue = (TextView)findViewById(R.id.timeEditValue); LinearLayout repeatEditRegion = (LinearLayout)findViewById(R.id.repeatEdit); tvRepeatValue = (TextView)findViewById(R.id.repeatEditValue); repeatEditRegion.setOnClickListener(this); btnOK = (Button)findViewById(R.id.btnOK); btnOK.setOnClickListener(this); btnDelete = (Button)findViewById(R.id.btnDelete); btnDelete.setOnClickListener(this); dbHelper = new DatabaseHelper(this); Intent intent = getIntent(); alarmId = intent.getIntExtra("_id", -1); if (alarmId == -1) { Time time = new Time(); time.setToNow(); alarmTime.setHour(""+time.hour); alarmTime.setMinute(""+time.minute); tvTimeValue.setText(time.hour+":"+time.minute); btnDelete.setEnabled(false); } else { cursor = dbHelper.selectById(alarmId); alarmTime = dbHelper.getAlarmTime(cursor); tvTimeValue.setText(alarmTime.getHour()+":"+alarmTime.getMinute()); String enableDaysStr = ""; for (int i = 0; i < alarmTime.getEnableDays().length; i++) { if (alarmTime.getEnableDays()[i] == 1) { if ("".equals(enableDaysStr)) { enableDaysStr += enableDaysName[i]; } else { enableDaysStr += (", "+enableDaysName[i]); } } } tvRepeatValue.setText(enableDaysStr); btnDelete.setEnabled(true); } } public void onClick(View v) { // TODO Auto-generated method stub switch (v.getId()) { case R.id.timeEdit: { View view = getLayoutInflater().inflate(R.layout.alarm, null); final TimePicker timePicker = (TimePicker)view.findViewById(R.id.timePicker); timePicker.setIs24HourView(true); new AlertDialog.Builder(this).setTitle(R.string.title_alert_time).setView(view). setPositiveButton(R.string.btn_alert_time_ok, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { // TODO Auto-generated method stub String hourStr = String.valueOf(timePicker.getCurrentHour()); String minuteStr = String.valueOf(timePicker.getCurrentMinute()); alarmTime.setHour(hourStr); alarmTime.setMinute(minuteStr); String timeStr = hourStr + ":" + minuteStr; tvTimeValue.setText(timeStr); } }).setNegativeButton(R.string.btn_alert_time_cancel, null).show(); break; } case R.id.repeatEdit: { if (alarmId > -1) { for (int i = 0; i < flags.length; i++) { if (alarmTime.getEnableDays()[i] == 1) { flags[i] = true; } } } new AlertDialog.Builder(this).setTitle(R.string.title_alert_repeate) .setMultiChoiceItems(R.array.week, flags, new DialogInterface.OnMultiChoiceClickListener() { public void onClick(DialogInterface dialog, int which, boolean isChecked) { // TODO Auto-generated method stub flags[which] = isChecked; } }).setPositiveButton(R.string.btn_alert_repeat_ok, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { // TODO Auto-generated method stub String daysStr = ""; int[] enableDays = new int[]{0, 0, 0, 0, 0, 0, 0}; for (int i = 0; i < flags.length; i++) { if (flags[i]) { enableDays[i] = 1; if ("".equals(daysStr)) { daysStr += enableDaysName[i]; } else { daysStr += (", "+enableDaysName[i]); } } } alarmTime.setEnableDays(enableDays); tvRepeatValue.setText(daysStr); } }).setNegativeButton(R.string.btn_alert_repeat_cancel, null).show(); break; } case R.id.btnOK: { if (alarmId == -1) { dbHelper.insert(alarmTime); } else { dbHelper.update(alarmId, alarmTime); } finish(); break; } case R.id.btnDelete: { dbHelper.delete(alarmId); finish(); break; } default: break; } } }
(在F:\java\clock\AlarmClock2\AlarmClock)