免费观看又色又爽又黄的小说免费_美女福利视频国产片_亚洲欧美精品_美国一级大黄大色毛片

Android中怎么實現一個鬧鐘功能

本篇文章為大家展示了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。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

綿陽服務器托管