本篇文章為大家展示了Android中怎么實現一個鬧鐘功能,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。
讓客戶滿意是我們工作的目標,不斷超越客戶的期望值來自于我們對這個行業的熱愛。我們立志把好的技術通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領域值得信任、有價值的長期合作伙伴,公司提供的服務項目有:域名與空間、虛擬主機、營銷軟件、網站建設、峨眉山網站維護、網站推廣。
AlarmView
package com.example.lenovo.clock2; import android.app.AlarmManager; 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.icu.util.Calendar; import android.os.Build; import android.support.annotation.Nullable; import android.support.annotation.RequiresApi; import android.support.v7.app.AlertDialog; 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; import java.util.Date; /** * Created by lenovo on 2017/11/20. */ //鬧鐘 public class AlarmView extends LinearLayout { // public AlarmView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) { // super(context, attrs, defStyleAttr); // } public AlarmView(Context context, @Nullable AttributeSet attrs) { super(context, attrs); init(); } public AlarmView(Context context) { super(context); init(); } private void init(){ alarmManager= (AlarmManager) getContext().getSystemService(Context.ALARM_SERVICE); } @RequiresApi(api = Build.VERSION_CODES.N) @Override protected void onFinishInflate() { super.onFinishInflate(); btnAddAlarm=findViewById(R.id.btnAddAlarm); lvAlarmList=findViewById(R.id.lvAlarmList); adapter=new ArrayAdapter<AlarmView.AlarmData>(getContext(),R.layout.support_simple_spinner_dropdown_item); lvAlarmList.setAdapter(adapter); readSavedAlarmList(); //adapter.add(new AlarmData(System.currentTimeMillis())); btnAddAlarm.setOnClickListener(new OnClickListener() { @RequiresApi(api = Build.VERSION_CODES.N) @Override public void onClick(View view) { addAlarm(); } }); lvAlarmList.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener(){ @Override public boolean onItemLongClick(AdapterView<?> adapterView, View view, final int position, long id) { new AlertDialog.Builder(getContext()).setTitle("操作選項").setItems(new CharSequence[]{"刪除"}, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialogInterface, int which) { switch (which){ case 0: deleteAlarm(position); break; default: break; } } }).setNegativeButton("取消",null).show(); return true; } }); } 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)); } @RequiresApi(api = Build.VERSION_CODES.N) private void addAlarm(){ //獲取當前時間 Calendar c=Calendar.getInstance(); //時間選擇框 new TimePickerDialog(getContext(), new TimePickerDialog.OnTimeSetListener() { @Override public void onTimeSet(TimePicker view, int hourOfDay, int minute) { Calendar calendar =Calendar.getInstance(); calendar.set(Calendar.HOUR_OF_DAY,hourOfDay); calendar.set(Calendar.MINUTE,minute); calendar.set(Calendar.SECOND,0); calendar.set(Calendar.MILLISECOND,0); //寫出當前時間 Calendar currentTime=Calendar.getInstance(); //設置時間小于當前時間,往后推一天 if(calendar.getTimeInMillis()<=currentTime.getTimeInMillis()){ calendar.setTimeInMillis(calendar.getTimeInMillis()+24*60*60*1000); } AlarmData ad=new AlarmData(calendar.getTimeInMillis()); adapter.add(ad); /* 第一個參數 RTC操作系統時間為啟動時間點,WAKEUP系統休眠時同樣執行 第二個參數 什么時候啟動 第三個參數 啟動之后什么時間再次啟動 第四個參數 Pendingintent掛起的Intent,不立即執行 */ alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, ad.getTime(),//當前時間當做請求碼 5*60*1000, //執行廣播 PendingIntent.getBroadcast(getContext(), ad.getId(), new Intent(getContext(), AlarmReceiver.class), 0)); //每一個鬧鐘對應一個請求碼,根據請求碼移除特定的鬧鐘,那么把時間當做請求碼 saveAlarmList(); } },c.get(Calendar.HOUR_OF_DAY),c.get(Calendar.MINUTE),true).show(); } //保存鬧鐘數據 private void saveAlarmList(){ SharedPreferences.Editor editor=getContext().getSharedPreferences(AlarmView.class.getName(),Context.MODE_PRIVATE).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.toString().substring(0,sb.length()-1);//去掉最后一個逗號 editor.putString(KEY_ALARM_LIST,content); }else{ editor.putString(KEY_ALARM_LIST,null); } editor.commit(); } //讀取已存數據 @RequiresApi(api = Build.VERSION_CODES.N) private void readSavedAlarmList(){ SharedPreferences sp=getContext().getSharedPreferences((AlarmView.class.getName()), Context.MODE_PRIVATE); String content=sp.getString(KEY_ALARM_LIST,null); if(content!=null){ String[] timeStrings=content.split(","); for(String string:timeStrings){ adapter.add(new AlarmData(Long.parseLong(string))); } } } private static final String KEY_ALARM_LIST="alarmList"; private Button btnAddAlarm; private ListView lvAlarmList; private ArrayAdapter<AlarmData> adapter; private AlarmManager alarmManager;//系統的鬧鐘服務 private static class AlarmData{ //鬧鐘所要響起的時間 @RequiresApi(api = Build.VERSION_CODES.N) public AlarmData(long time){ this.time=time; date= Calendar.getInstance(); date.setTimeInMillis(time); timeLable=String.format("%d月%d日 %d:%d", date.get(Calendar.MONTH)+1,//getMonth的返回值是從0開始的 date.get(Calendar.DAY_OF_MONTH), date.get(Calendar.HOUR_OF_DAY), date.get(Calendar.MINUTE)); } public long getTime(){ return time; } public String getTimeLable(){ return timeLable; } @Override public String toString() { return getTimeLable(); } public int getId(){ return (int)(getTime()/1000/60);//精確到分鐘,getTime為毫秒 } //獲取時間的標簽 private String timeLable=""; private long time=0; private Calendar date; } }
TimeView
package com.example.lenovo.clock2; import android.content.Context; import android.icu.util.Calendar; import android.os.Build; import android.os.Handler; import android.os.Message; import android.support.annotation.IntDef; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.annotation.RequiresApi; import android.util.AttributeSet; import android.view.View; import android.widget.LinearLayout; import android.widget.TextView; /** * Created by lenovo on 2017/11/20. */ //時鐘 顯示目前的時間 public class TimeView extends LinearLayout { public TimeView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } public TimeView(Context context, @Nullable AttributeSet attrs) { super(context, attrs); } public TimeView(Context context) { super(context); } @Override protected void onFinishInflate() { super.onFinishInflate(); tvTime=findViewById(R.id.tvTime); tvTime.setText("這里顯示時間"); timerHander.sendEmptyMessage(0); } //判斷可見屬性是否發生改變 @Override protected void onVisibilityChanged(View changedView, int visibility) { super.onVisibilityChanged(changedView, visibility); if(getVisibility()== View.VISIBLE){ timerHander.sendEmptyMessage(0);//可見,則呈現 }else{ timerHander.removeMessages(0);//否則移除所有消息 } } //刷新時間 @RequiresApi(api = Build.VERSION_CODES.N) private void refreshTime(){ Calendar c=Calendar.getInstance(); tvTime.setText(String.format("%d:%d:%d",c.get(Calendar.HOUR_OF_DAY),c.get(Calendar.MINUTE),c.get(Calendar.SECOND))); } //Hander每隔一秒執行一次 private Handler timerHander=new Handler(){ @RequiresApi(api = Build.VERSION_CODES.N) @Override public void handleMessage(Message msg) { refreshTime(); //若為當前頁面,則刷新;否則,沒有必要刷新 if (getVisibility()== View.VISIBLE) { timerHander.sendEmptyMessageDelayed(0, 1000);//1000毫秒后再執行handleMessage方法 } }; }; private TextView tvTime; }
AlarmReceiver
package com.example.lenovo.clock2; import android.app.AlarmManager; import android.app.PendingIntent; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; /** * Created by lenovo on 2017/11/23. */ public class AlarmReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { AlarmManager am= (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); am.cancel(PendingIntent.getBroadcast(context,getResultCode(),new Intent(context,AlarmReceiver.class),0)); Intent i=new Intent(context,PlayAlarmAty.class); i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(i); } }
MainActivity
package com.example.lenovo.clock2; import android.app.Activity; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.widget.TabHost; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); tabHost= (TabHost) findViewById(R.id.tabhost); tabHost.setup(); //setContent()為聲明內容 tabHost.addTab(tabHost.newTabSpec("tabTime").setIndicator("時鐘").setContent(R.id.tabTime)); tabHost.addTab(tabHost.newTabSpec("tabAlarm").setIndicator("鬧鐘").setContent(R.id.tabAlarm)); tabHost.addTab(tabHost.newTabSpec("tabTimer").setIndicator("計時器").setContent(R.id.tabTimer)); tabHost.addTab(tabHost.newTabSpec("tabStopWatch").setIndicator("秒表").setContent(R.id.tabStopWatch)); } private TabHost tabHost; }
PlayAlarmAty
package com.example.lenovo.clock2; import android.app.Activity; import android.media.MediaPlayer; import android.os.Bundle; import android.support.annotation.Nullable; /** * Created by lenovo on 2017/11/25. */ public class PlayAlarmAty extends Activity { @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.alarm_player_aty); mp=MediaPlayer.create(this,R.raw.mine); mp.start(); } @Override protected void onPause() { super.onPause(); finish(); } @Override protected void onDestroy() { super.onDestroy(); mp.stop(); mp.release(); } private MediaPlayer mp; //音樂播放器 }
上述內容就是Android中怎么實現一個鬧鐘功能,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注創新互聯行業資訊頻道。
網頁標題:Android中怎么實現一個鬧鐘功能
本文網址:http://m.newbst.com/article12/jesedc.html
成都網站建設公司_創新互聯,為您提供動態網站、品牌網站制作、關鍵詞優化、網站內鏈、App開發、全網營銷推廣
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯