欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

簡(jiǎn)單實(shí)現(xiàn)Android鬧鐘功能

 更新時(shí)間:2021年01月27日 12:07:53   作者:我愛酸奶奶奶奶奶  
這篇文章主要教大家如何簡(jiǎn)單實(shí)現(xiàn)Android鬧鐘功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

鬧鐘的簡(jiǎn)單實(shí)現(xiàn),只有顯示時(shí)間和設(shè)置鬧鐘。

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("操作選項(xiàng)").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(){ 
 //獲取當(dāng)前時(shí)間 
 Calendar c=Calendar.getInstance(); 
 //時(shí)間選擇框 
 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); 
 
 
  //寫出當(dāng)前時(shí)間 
  Calendar currentTime=Calendar.getInstance(); 
 
  //設(shè)置時(shí)間小于當(dāng)前時(shí)間,往后推一天 
  if(calendar.getTimeInMillis()<=currentTime.getTimeInMillis()){ 
   calendar.setTimeInMillis(calendar.getTimeInMillis()+24*60*60*1000); 
  } 
 
  AlarmData ad=new AlarmData(calendar.getTimeInMillis()); 
  adapter.add(ad); 
 
 
/* 
第一個(gè)參數(shù) RTC操作系統(tǒng)時(shí)間為啟動(dòng)時(shí)間點(diǎn),WAKEUP系統(tǒng)休眠時(shí)同樣執(zhí)行 
第二個(gè)參數(shù) 什么時(shí)候啟動(dòng) 
第三個(gè)參數(shù) 啟動(dòng)之后什么時(shí)間再次啟動(dòng) 
第四個(gè)參數(shù) Pendingintent掛起的Intent,不立即執(zhí)行 
*/ 
  alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, 
   ad.getTime(),//當(dāng)前時(shí)間當(dāng)做請(qǐng)求碼 
   5*60*1000, 
   //執(zhí)行廣播 
   PendingIntent.getBroadcast(getContext(), 
    ad.getId(), 
    new Intent(getContext(), 
     AlarmReceiver.class), 
    0)); 
 
//每一個(gè)鬧鐘對(duì)應(yīng)一個(gè)請(qǐng)求碼,根據(jù)請(qǐng)求碼移除特定的鬧鐘,那么把時(shí)間當(dāng)做請(qǐng)求碼 
  saveAlarmList(); 
  } 
 },c.get(Calendar.HOUR_OF_DAY),c.get(Calendar.MINUTE),true).show(); 
 
 } 
 //保存鬧鐘數(shù)據(jù) 
 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);//去掉最后一個(gè)逗號(hào) 
  editor.putString(KEY_ALARM_LIST,content); 
 }else{ 
  editor.putString(KEY_ALARM_LIST,null); 
 } 
 editor.commit(); 
 } 
 //讀取已存數(shù)據(jù) 
 
 @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;//系統(tǒng)的鬧鐘服務(wù) 
 private static class AlarmData{ 
 
 //鬧鐘所要響起的時(shí)間 
 @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為毫秒 
 } 
 
 
 //獲取時(shí)間的標(biāo)簽 
 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. 
 */ 
//時(shí)鐘 顯示目前的時(shí)間 
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("這里顯示時(shí)間"); 
 
 timerHander.sendEmptyMessage(0); 
 
 } 
 //判斷可見屬性是否發(fā)生改變 
 @Override 
 protected void onVisibilityChanged(View changedView, int visibility) { 
 super.onVisibilityChanged(changedView, visibility); 
 if(getVisibility()== View.VISIBLE){ 
  timerHander.sendEmptyMessage(0);//可見,則呈現(xiàn) 
 }else{ 
  timerHander.removeMessages(0);//否則移除所有消息 
 } 
 } 
 
 //刷新時(shí)間 
 @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每隔一秒執(zhí)行一次 
 private Handler timerHander=new Handler(){ 
 
 @RequiresApi(api = Build.VERSION_CODES.N) 
 @Override 
 public void handleMessage(Message msg) { 
 
  refreshTime(); 
  //若為當(dāng)前頁面,則刷新;否則,沒有必要刷新 
  if (getVisibility()== View.VISIBLE) { 
  timerHander.sendEmptyMessageDelayed(0, 1000);//1000毫秒后再執(zhí)行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()為聲明內(nèi)容 
 tabHost.addTab(tabHost.newTabSpec("tabTime").setIndicator("時(shí)鐘").setContent(R.id.tabTime)); 
 tabHost.addTab(tabHost.newTabSpec("tabAlarm").setIndicator("鬧鐘").setContent(R.id.tabAlarm)); 
 tabHost.addTab(tabHost.newTabSpec("tabTimer").setIndicator("計(jì)時(shí)器").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; 
 //音樂播放器 
} 

運(yùn)行效果圖

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Kotlin協(xié)程之Flow異常示例處理

    Kotlin協(xié)程之Flow異常示例處理

    這篇文章主要為大家介紹了Kotlin協(xié)程之Flow異常處理,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-09-09
  • Android adb安裝apk時(shí)提示Invalid APK file的問題

    Android adb安裝apk時(shí)提示Invalid APK file的問題

    這篇文章主要介紹了Android adb安裝apk時(shí)提示Invalid APK file的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-08-08
  • Android實(shí)現(xiàn)APP秒表功能

    Android實(shí)現(xiàn)APP秒表功能

    這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)APP秒表功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-09-09
  • Android應(yīng)用程序簽名步驟及相關(guān)知識(shí)介紹

    Android應(yīng)用程序簽名步驟及相關(guān)知識(shí)介紹

    本文主要介紹Android應(yīng)用程序簽名相關(guān)的理論知識(shí),包括:什么是簽名、為什么要給應(yīng)用程序簽名、如何給應(yīng)用程序簽名等,感興趣的朋友可以參考下哈
    2013-04-04
  • Android使用ContentProvider初始化SDK庫方案小結(jié)

    Android使用ContentProvider初始化SDK庫方案小結(jié)

    這篇文章主要介紹了Android使用ContentProvider初始化SDK庫方案總結(jié),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-04-04
  • Android—基于微信開放平臺(tái)v3SDK開發(fā)(微信支付填坑)

    Android—基于微信開放平臺(tái)v3SDK開發(fā)(微信支付填坑)

    這篇文章主要介紹了Android—基于微信開放平臺(tái)v3SDK開發(fā)(微信支付填坑),具有一定的參考價(jià)值,有需要的可以了解一下。
    2016-11-11
  • 自定義Android注解系列教程之注解變量

    自定義Android注解系列教程之注解變量

    這篇文章主要給大家介紹了關(guān)于自定義Android注解系列教程之注解變量的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-07-07
  • android系統(tǒng)按鍵音framework流程源碼詳細(xì)解析

    android系統(tǒng)按鍵音framework流程源碼詳細(xì)解析

    這篇文章主要為大家詳細(xì)介紹了android系統(tǒng)按鍵音framework流程源碼,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • Android Socket實(shí)現(xiàn)多個(gè)客戶端聊天布局

    Android Socket實(shí)現(xiàn)多個(gè)客戶端聊天布局

    這篇文章主要為大家詳細(xì)介紹了Android Socket實(shí)現(xiàn)多個(gè)客戶端聊天布局,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • Android中WebView與Js交互的實(shí)現(xiàn)方法

    Android中WebView與Js交互的實(shí)現(xiàn)方法

    本文給大家介紹android中webview與js交互的實(shí)現(xiàn)方法,本文介紹的非常詳細(xì),具有參考借鑒價(jià)值,感興趣的朋友一起學(xué)習(xí)
    2016-05-05

最新評(píng)論