国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

簡單實現Android鬧鐘功能

2019-10-22 18:16:20
字體:
來源:轉載
供稿:網友

鬧鐘的簡單實現,只有顯示時間和設置鬧鐘。

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,鬧鐘

Android,鬧鐘

Android,鬧鐘

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。


注:相關教程知識閱讀請移步到Android開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 壤塘县| 平利县| 宜兰县| 若尔盖县| 达孜县| 常熟市| 高邮市| 财经| 奈曼旗| 阿瓦提县| 托克逊县| 城口县| 水城县| 浙江省| 衢州市| 扎鲁特旗| 宜川县| 临洮县| 迭部县| 石首市| 定西市| 达尔| 冀州市| 新邵县| 永福县| 和政县| 罗甸县| 托克逊县| 滨州市| 勃利县| 江孜县| 白沙| 房山区| 团风县| 麻城市| 青海省| 星座| 漯河市| 瑞昌市| 石首市| 民丰县|