android闹钟(五):实现闹钟功能
生活随笔
收集整理的這篇文章主要介紹了
android闹钟(五):实现闹钟功能
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
?
?
鬧鐘主頁面:AlarmView.java
package com.mytest.myclock;import java.util.Calendar;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.util.AttributeSet; import android.view.View; import android.widget.Adapter; import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.Button; import android.widget.LinearLayout; import android.widget.ListView; import android.widget.ShareActionProvider; import android.widget.TimePicker; import android.widget.Toast;public class AlarmView extends LinearLayout {public AlarmView(Context context, AttributeSet attrs, int defStyle) {super(context, attrs, defStyle);// TODO Auto-generated constructor stub }public AlarmView(Context context, AttributeSet attrs) {super(context, attrs);// TODO Auto-generated constructor stub }public AlarmView(Context context) {super(context);// TODO Auto-generated constructor stub }private ListView alarmListView;private Button addAlarmButton;private ArrayAdapter<Alarm> adapter;private final static String KEY_ALARM_LIST = "clarm_list";private AlarmManager alarmManager;@Overrideprotected void onFinishInflate() {super.onFinishInflate();alarmListView = (ListView) this.findViewById(R.id.lv_alarm);addAlarmButton = (Button) this.findViewById(R.id.btn_add_alarm);addAlarmButton.setOnClickListener(new AddAlarmOnClickListener());adapter = new ArrayAdapter<AlarmView.Alarm>(getContext(), android.R.layout.simple_list_item_1);alarmListView.setAdapter(adapter);alarmListView.setOnItemLongClickListener(new ClarmOnItemLongClickListener());readSaveCalarm();alarmManager = (AlarmManager) getContext().getSystemService(Context.ALARM_SERVICE);}private final class ClarmOnItemLongClickListener implements AdapterView.OnItemLongClickListener {@Overridepublic boolean onItemLongClick(AdapterView<?> parent, View view, final int position, long id) {//System.out.println("onItemLongClick=================>");new AlertDialog.Builder(getContext()).setTitle("確認刪除?").setNegativeButton("取消", null).setPositiveButton("確定", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {System.out.println("onItemLongClick->onClick:which:" + which);removeAlarm(position);}}).show();return true;}}private final class AddAlarmOnClickListener implements View.OnClickListener {@Overridepublic void onClick(View v) {// Toast.makeText(getContext(), "add",Toast.LENGTH_SHORT).show(); addAlarm();}}private void removeAlarm(int index) {Alarm alarm = adapter.getItem(index);adapter.remove(alarm);saveAlarm();alarmManager.cancel(PendingIntent.getBroadcast(getContext(), alarm.getId(), new Intent(getContext(),AlarmReceiver.class), 0));}/*** 保存設置的鬧鐘。覆蓋式的,全部重新寫入,清空原有的。*/private void saveAlarm() {Editor edit = getContext().getSharedPreferences(AlarmView.class.getName(), Context.MODE_PRIVATE).edit();StringBuffer alarmListStr = new StringBuffer();for (int i = 0; i < adapter.getCount(); i++) {alarmListStr.append(adapter.getItem(i).getTime()).append(",");}edit.putString(KEY_ALARM_LIST, alarmListStr.toString());edit.commit();}/*** 讀取保存的鬧鐘*/private void readSaveCalarm() {SharedPreferences share = getContext().getSharedPreferences(AlarmView.class.getName(), Context.MODE_PRIVATE);String alarmListStr = share.getString(KEY_ALARM_LIST, "");if (alarmListStr != null) {String[] alarmArr = alarmListStr.split(",");if (alarmArr != null) {for (String str : alarmArr) {System.out.println("alarm:" + str);if (str != null && !"".equals(str.trim())) {long time = Long.valueOf(str);adapter.add(new Alarm(time));}}}}}/*** 添加鬧鐘*/private void addAlarm() {Calendar curCal = Calendar.getInstance();new TimePickerDialog(getContext(), new TimePickerDialog.OnTimeSetListener() {@Overridepublic void onTimeSet(TimePicker view, int hourOfDay, int minute) {Calendar alarmCal = Calendar.getInstance();alarmCal.set(Calendar.HOUR_OF_DAY, hourOfDay);alarmCal.set(Calendar.MINUTE, minute);alarmCal.set(Calendar.SECOND, 0);// 如果設置時間小于當前時間,則往后推一天。Calendar currentTime = Calendar.getInstance();if (alarmCal.getTimeInMillis() <= currentTime.getTimeInMillis()) {alarmCal.setTimeInMillis(alarmCal.getTimeInMillis() + 24 * 60 * 60 * 1000);}// System.out.println(String.format("hourOfDay:%d,minute:%d",// hourOfDay,minute));// 添加到adapter,顯示到列表Alarm alarm = new Alarm(alarmCal.getTimeInMillis());adapter.add(alarm);//每隔10分鐘alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, alarm.getTime(), 10 * 60 * 1000, PendingIntent.getBroadcast(getContext(), alarm.getId(), new Intent(getContext(), AlarmReceiver.class), 0));// 保存到share中,下次啟動再讀取 saveAlarm();}}, curCal.get(Calendar.HOUR_OF_DAY), curCal.get(Calendar.MINUTE), true).show();}private class Alarm {private long time = 0;private String timeLabel = "";private Calendar date;public Alarm(Long time) {this.time = time;Calendar cal = Calendar.getInstance();cal.setTimeInMillis(time);timeLabel = String.format("%d-%d %d:%d", cal.get(Calendar.MONTH + 1), cal.get(Calendar.DAY_OF_MONTH),cal.get(Calendar.HOUR_OF_DAY), cal.get(Calendar.MINUTE));}public long getTime() {return time;}public String getTimeLabel() {return timeLabel;}public Calendar getDate() {return date;}public int getId() {return (int) (getTime() / 1000 / 60);}@Overridepublic String toString() {return getTimeLabel();}}} View Code?
鬧鐘時間到,播放音樂的activity:PlayAlarmAty.java
package com.mytest.myclock;import android.app.Activity; import android.media.MediaPlayer; import android.os.Bundle;public class PlayAlarmAty extends Activity {private MediaPlayer player;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.alarm_music_play);player = MediaPlayer.create(this, R.raw.an_angel);player.start();}@Overrideprotected void onPause() {// TODO Auto-generated method stubsuper.onPause();finish();}@Overrideprotected void onDestroy() {// TODO Auto-generated method stubsuper.onDestroy();player.stop();player.release();} } View Code?
鬧鐘播放界面
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical" ><TextViewandroid:textAppearance="?android:attr/textAppearanceLarge"android:layout_width="fill_parent"android:layout_height="fill_parent"android:gravity="center"android:text="@string/play_sound" /></LinearLayout> View Code?
鬧鐘時間到,接收處理類AlarmReceiver.java
package com.mytest.myclock;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 {@Overridepublic void onReceive(Context context, Intent intent) {System.out.println("AlarmReceiver.onReceive");AlarmManager manager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);manager.cancel(PendingIntent.getBroadcast(context, getResultCode(), new Intent(context, AlarmReceiver.class), 0));Intent it = new Intent(context, PlayAlarmAty.class);it.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);context.startActivity(it);}} View Code?
AndroidMainfest.xml添加配置
<receiver android:name=".AlarmReceiver"></receiver><activity android:name="PlayAlarmAty" android:screenOrientation="portrait"></activity> View Code?
另:在res中添加音樂文件。
?
轉載于:https://www.cnblogs.com/2015android/p/4668007.html
總結
以上是生活随笔為你收集整理的android闹钟(五):实现闹钟功能的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Facade Pattern
- 下一篇: C# 获取USB设备信息