欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android实现闹钟小程序

程序员文章站 2022-10-13 10:06:26
最近写了个闹钟的程序,看到sharedpreferences在一个程序中可以共享数据,sharedpreferences是一个轻量级的键值存储机制,只可以存储基本数据类型。...

最近写了个闹钟的程序,看到sharedpreferences在一个程序中可以共享数据,sharedpreferences是一个轻量级的键值存储机制,只可以存储基本数据类型。我就拿来用用,没想到sharedpreferences太好了,真是轻量级的保存数据的好的工具,比sqlite好用多了!以后我又多了一种编程思想了,呵呵,所以现在分享给大家,特别注意这点:这个无法直接在多个程序间共享preferences数据。程序关闭再打开时间仍然保留你上次设置的时间。这就是preferences的作用!                

程序欢迎界面:

Android实现闹钟小程序

点击设置闹钟界面:

Android实现闹钟小程序      

点击闹钟设置中的设置后的界面:                       

 Android实现闹钟小程序             

闹钟时间到了弹出dialog:

Android实现闹钟小程序

 设置重复想起闹钟后的界面:                            

Android实现闹钟小程序   

点击返回键弹出的提示:

Android实现闹钟小程序

下面请看代码:

一、mainactivity中的代码:

package com.cn.daming;
 
import java.util.calendar;
 
import android.app.activity;
import android.app.alarmmanager;
import android.app.alertdialog;
import android.app.pendingintent;
import android.app.timepickerdialog;
import android.content.dialoginterface;
import android.content.intent;
import android.content.sharedpreferences;
import android.os.bundle;
import android.view.keyevent;
import android.view.layoutinflater;
import android.view.motionevent;
import android.view.view;
import android.widget.button;
import android.widget.edittext;
import android.widget.textview;
import android.widget.timepicker;
import android.widget.toast;
 
public class mainactivity extends activity {
 textview settime1;
 textview settime2;
 textview settime3;
 button mbutton1;
 button mbutton2;
 button mbutton3;
 button mbutton4;
 button mbutton5;
 button mbutton6;
 
 string time1string = null;
 string time2string = null;
 string time3string = null;
 string defalutstring = "目前无设置";
 
 alertdialog builder = null;
 calendar c=calendar.getinstance();
 
 @override
 public void oncreate(bundle savedinstancestate)
 {
  super.oncreate(savedinstancestate);
  setcontentview(r.layout.main);
   
  //取得活动的preferences对象
  sharedpreferences settings = getpreferences(activity.mode_private);
  time1string = settings.getstring("time1", defalutstring);
  time2string = settings.getstring("time2", defalutstring);
  time3string = settings.getstring("time3", defalutstring);
  
  initbutton1();
  initbutton2();
  initbutton3();
  initbutton4();
  initbutton5();
  initbutton6(); 
  
  settime1.settext(time1string);
  settime3.settext(time2string);
  settime2.settext(time3string);
 }
 
 public void initbutton1()
 {
  settime1=(textview) findviewbyid(r.id.settime1);
  mbutton1=(button)findviewbyid(r.id.mbutton1);
  mbutton1.setonclicklistener(new view.onclicklistener()
  {
   public void onclick(view v)
   {
   c.settimeinmillis(system.currenttimemillis());
   int mhour=c.get(calendar.hour_of_day);
   int mminute=c.get(calendar.minute);
   
   
   new timepickerdialog(mainactivity.this,
    new timepickerdialog.ontimesetlistener()
    {    
    public void ontimeset(timepicker view,int hourofday,
          int minute)
    {
     c.settimeinmillis(system.currenttimemillis());
     c.set(calendar.hour_of_day,hourofday);
     c.set(calendar.minute,minute);
     c.set(calendar.second,0);
     c.set(calendar.millisecond,0);
     
     intent intent = new intent(mainactivity.this, callalarm.class);
     pendingintent sender=pendingintent.getbroadcast(
     mainactivity.this,0, intent, 0);
     alarmmanager am;
     am = (alarmmanager)getsystemservice(alarm_service);
     am.set(alarmmanager.rtc_wakeup,
      c.gettimeinmillis(),
      sender
      );
     string tmps=format(hourofday)+":"+format(minute);
     settime1.settext(tmps);
     
     //sharedpreferences保存数据,并提交
     sharedpreferences time1share = getpreferences(0);
     sharedpreferences.editor editor = time1share.edit();
     editor.putstring("time1", tmps);
     editor.commit();
     
     toast.maketext(mainactivity.this,"设置大明闹钟时间为"+tmps,
     toast.length_short)
     .show();
    }   
    },mhour,mminute,true).show();
   }
  });
 }
 
 public void initbutton2()
 {
  mbutton2=(button) findviewbyid(r.id.mbutton2);
  mbutton2.setonclicklistener(new view.onclicklistener()
  {
   public void onclick(view v)
   {
   intent intent = new intent(mainactivity.this, callalarm.class);
   pendingintent sender=pendingintent.getbroadcast(
    mainactivity.this,0, intent, 0);
   alarmmanager am;
   am =(alarmmanager)getsystemservice(alarm_service);
   am.cancel(sender);
   toast.maketext(mainactivity.this,"大明闹钟时间删除",
       toast.length_short).show();
   settime1.settext("目前无设置");
   
   sharedpreferences time1share = getpreferences(0);
    sharedpreferences.editor editor = time1share.edit();
    editor.putstring("time1", "目前无设置");
    editor.commit();
   }
  });
 }
 
 public void initbutton3()
 {
  settime3=(textview) findviewbyid(r.id.settime5);
  mbutton3=(button)findviewbyid(r.id.mbutton5);
  mbutton3.setonclicklistener(new view.onclicklistener()
  {
   public void onclick(view v)
   {
   c.settimeinmillis(system.currenttimemillis());
   int mhour=c.get(calendar.hour_of_day);
   int mminute=c.get(calendar.minute);
   
   
   new timepickerdialog(mainactivity.this,
    new timepickerdialog.ontimesetlistener()
    {    
    public void ontimeset(timepicker view,int hourofday,
          int minute)
    {
     c.settimeinmillis(system.currenttimemillis());
     c.set(calendar.hour_of_day,hourofday);
     c.set(calendar.minute,minute);
     c.set(calendar.second,0);
     c.set(calendar.millisecond,0);
     
     intent intent = new intent(mainactivity.this, callalarm.class);
     pendingintent sender=pendingintent.getbroadcast(
     mainactivity.this,1, intent, 0);
     alarmmanager am;
     am = (alarmmanager)getsystemservice(alarm_service);
     am.set(alarmmanager.rtc_wakeup,
      c.gettimeinmillis(),
      sender
      );
     string tmps=format(hourofday)+":"+format(minute);
     settime3.settext(tmps);
     
     //sharedpreferences保存数据,并提交
     sharedpreferences time2share = getpreferences(1);
     sharedpreferences.editor editor = time2share.edit();
     editor.putstring("time2", tmps);
     editor.commit();
     
     toast.maketext(mainactivity.this,"设置大明闹钟时间为"+tmps,
     toast.length_short)
     .show();
    }   
    },mhour,mminute,true).show();
   }
  });
 }
 
 public void initbutton4()
 {
  mbutton4=(button) findviewbyid(r.id.mbutton6);
  mbutton4.setonclicklistener(new view.onclicklistener()
  {
   public void onclick(view v)
   {
   intent intent = new intent(mainactivity.this, callalarm.class);
   pendingintent sender=pendingintent.getbroadcast(
    mainactivity.this,0, intent, 0);
   alarmmanager am;
   am =(alarmmanager)getsystemservice(alarm_service);
   am.cancel(sender);
   toast.maketext(mainactivity.this,"大明闹钟时间删除",
       toast.length_short).show();
   settime3.settext("目前无设置");
   
   //sharedpreferences保存数据,并提交
    sharedpreferences time2share = getpreferences(1);
    sharedpreferences.editor editor = time2share.edit();
    editor.putstring("time2", "目前无设置");
    editor.commit();
   }
  });
 }
 
 public void initbutton5()
 {
  settime2=(textview) findviewbyid(r.id.settime2);
  layoutinflater factory = layoutinflater.from(this);
  final view setview = factory.inflate(r.layout.timeset,null);
  final timepicker tpicker=(timepicker)setview
         .findviewbyid(r.id.tpicker);
  tpicker.setis24hourview(true);
 
  final alertdialog di=new alertdialog.builder(mainactivity.this)
    .seticon(r.drawable.clock)
    .settitle("设置")
    .setview(setview)
    .setpositivebutton("确定",
    new dialoginterface.onclicklistener()
    {
    public void onclick(dialoginterface dialog, int which)
    {
     edittext ed=(edittext)setview.findviewbyid(r.id.medit);
     int times=integer.parseint(ed.gettext().tostring())
        *1000;
     c.settimeinmillis(system.currenttimemillis());
     c.set(calendar.hour_of_day,tpicker.getcurrenthour());
     c.set(calendar.minute,tpicker.getcurrentminute());
     c.set(calendar.second,0);
     c.set(calendar.millisecond,0);
 
     intent intent = new intent(mainactivity.this,
            callalarm.class);
     pendingintent sender = pendingintent.getbroadcast(
     mainactivity.this,1, intent, 0);
     alarmmanager am;
     am = (alarmmanager)getsystemservice(alarm_service);
     am.setrepeating(alarmmanager.rtc_wakeup,
       c.gettimeinmillis(),times,sender);
     string tmps=format(tpicker.getcurrenthour())+":"+
        format(tpicker.getcurrentminute());
     string substr = "设置大明闹钟时间为"+tmps+
       "开始,重复间隔为"+times/1000+"秒";
     settime2.settext("设置大明闹钟时间为"+tmps+
         "开始,重复间隔为"+times/1000+"秒");
     
     //sharedpreferences保存数据,并提交 
     sharedpreferences time3share = getpreferences(2);
    sharedpreferences.editor editor = time3share.edit();
    editor.putstring("time3", substr);
    editor.commit();
     
     toast.maketext(mainactivity.this,"设置大明闹钟为"+tmps+
         "开始,重复间隔为"+times/1000+"秒",
         toast.length_short).show();
    }
    })
    .setnegativebutton("取消",
    new dialoginterface.onclicklistener()
    {
    public void onclick(dialoginterface dialog, int which)
    {
    }
    }).create();
 
  mbutton5=(button) findviewbyid(r.id.mbutton3);
  mbutton5.setonclicklistener(new view.onclicklistener()
  {
   public void onclick(view v)
   {
   c.settimeinmillis(system.currenttimemillis());
   tpicker.setcurrenthour(c.get(calendar.hour_of_day));
   tpicker.setcurrentminute(c.get(calendar.minute));
   di.show();
   }
  });
 }
 
 public void initbutton6()
 {
  mbutton6=(button) findviewbyid(r.id.mbutton4);
  mbutton6.setonclicklistener(new view.onclicklistener()
  {
   public void onclick(view v)
   {
   intent intent = new intent(mainactivity.this, callalarm.class);
   pendingintent sender = pendingintent.getbroadcast(
    mainactivity.this,1, intent, 0);
   alarmmanager am;
   am = (alarmmanager)getsystemservice(alarm_service);
   am.cancel(sender);
   toast.maketext(mainactivity.this,"闹钟时间删除",
       toast.length_short).show();
   settime2.settext("目前无设置");
   //sharedpreferences保存数据,并提交 
    sharedpreferences time3share = getpreferences(2);
   sharedpreferences.editor editor = time3share.edit();
   editor.putstring("time3", "目前无设置");
   editor.commit();
   }
  });
 }
  
 @override
 public boolean onkeyup(int keycode, keyevent event) {
 
   if(keycode == keyevent.keycode_back){
 builder = new alertdialog.builder(mainactivity.this)
  .seticon(r.drawable.clock)
  .settitle("温馨提示:")
  .setmessage("您是否要退出大明闹钟程序!!!")
  .setpositivebutton("确定",
  new dialoginterface.onclicklistener() {
  public void onclick(dialoginterface dialog,
   int whichbutton) {
   mainactivity.this.finish();
  }
  })
  .setnegativebutton("取消",
  new dialoginterface.onclicklistener() {
  public void onclick(dialoginterface dialog,
   int whichbutton) {
   builder.dismiss();
  }
  }).show();
   }
   return true;
 }
 
 private string format(int x)
 {
  string s=""+x;
  if(s.length()==1) s="0"+s;
  return s;
 }
}

二、callalarm中的代码:

package com.cn.daming;
 
import android.content.context;
import android.content.intent;
import android.content.broadcastreceiver;
import android.os.bundle;
 
public class callalarm extends broadcastreceiver
{
 @override
 public void onreceive(context context, intent intent)
 {
 intent i = new intent(context, alarmalert.class);
  
 bundle bundleret = new bundle();
 bundleret.putstring("str_caller", "");
 i.putextras(bundleret);
 i.addflags(intent.flag_activity_new_task);
 context.startactivity(i);
 }
}

三、alarmalert中的代码:

package com.cn.daming;
 
import android.app.activity;
import android.app.alertdialog;
import android.content.dialoginterface;
import android.os.bundle;
 
public class alarmalert extends activity
{
 @override
 protected void oncreate(bundle savedinstancestate) 
 {
 super.oncreate(savedinstancestate);
 new alertdialog.builder(alarmalert.this)
  .seticon(r.drawable.clock)
  .settitle("大明闹钟响了!!")
  .setmessage("快完成你制定的计划吧!!!")
  .setpositivebutton("关掉它",
   new dialoginterface.onclicklistener()
  {
   public void onclick(dialoginterface dialog, int whichbutton)
   {
   alarmalert.this.finish();
   }
  })
  .show();
 } 
}

四、main.xml布局文件的代码:

<?xml version="1.0" encoding="utf-8"?>
<absolutelayout
 xmlns:android="http://schemas.android.com/apk/res/android"
 android:id="@+id/layout1"
 android:layout_width="fill_parent"
 android:layout_height="fill_parent"
 android:background="@drawable/other"
>
 <digitalclock
 android:id="@+id/dclock"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:textsize="40sp"
 android:textcolor="@drawable/blue"
 android:layout_x="70px"
 android:layout_y="32px"
 >
 </digitalclock>
 <textview
  android:id="@+id/text1"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:text="@string/str_title3"
  android:textsize="20sp"
  android:textcolor="@drawable/black"
  android:layout_x="10px"
  android:layout_y="104px"
 >
 </textview>
 <button
  android:id="@+id/mbutton1"
  android:layout_width="wrap_content"
  android:layout_height="40px"
  android:text="@string/str_button1"
  android:textcolor="@drawable/black"
  android:textsize="18sp"
  android:layout_x="190px"
  android:layout_y="102px"
 >
  </button>
  
  <textview
  android:id="@+id/settime1"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:text="@string/str_default"
  android:textcolor="@drawable/red"
  android:textsize="16sp"
  android:layout_x="10px"
  android:layout_y="149px"
 >
 </textview>
 <button
  android:id="@+id/mbutton2"
  android:layout_width="wrap_content"
  android:layout_height="40px"
  android:text="@string/str_button2"
  android:textcolor="@drawable/black"
  android:textsize="18sp"
  android:layout_x="190px"
  android:layout_y="142px"
 >
 </button>
 
 <textview
  android:id="@+id/text5"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:text="@string/str_title4"
  android:textsize="20sp"
  android:textcolor="@drawable/black"
  android:layout_x="10px"
  android:layout_y="216px"
 >
 </textview>
 <button
  android:id="@+id/mbutton5"
  android:layout_width="wrap_content"
  android:layout_height="40px"
  android:text="@string/str_button1"
  android:textcolor="@drawable/black"
  android:textsize="18sp"
  android:layout_x="190px"
  android:layout_y="212px"
 >
  </button>
  
  <textview
  android:id="@+id/settime5"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:text="@string/str_default"
  android:textcolor="@drawable/red"
  android:textsize="16sp"
  android:layout_x="10px"
  android:layout_y="259px"
 >
 </textview>
 <button
  android:id="@+id/mbutton6"
  android:layout_width="wrap_content"
  android:layout_height="40px"
  android:text="@string/str_button2"
  android:textcolor="@drawable/black"
  android:textsize="18sp"
  android:layout_x="190px"
  android:layout_y="252px"
 >
 </button>
 
 <textview
  android:id="@+id/text2"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:text="@string/str_title2"
  android:textsize="20sp"
  android:textcolor="@drawable/black"
  android:layout_x="10px"
  android:layout_y="326px"
 >
 </textview>
 <button
  android:id="@+id/mbutton3"
  android:layout_width="wrap_content"
  android:layout_height="40px"
  android:text="@string/str_button1"
  android:textcolor="@drawable/black"
  android:textsize="18sp"
  android:layout_x="190px"
  android:layout_y="322px"
 >
 </button>
 
 <textview
  android:id="@+id/settime2"
  android:layout_width="170px"
  android:layout_height="wrap_content"
  android:text="@string/str_default"
  android:textcolor="@drawable/red"
  android:textsize="16sp"
  android:layout_x="10px"
  android:layout_y="369px"
 >
  </textview>
 <button
  android:id="@+id/mbutton4"
  android:layout_width="wrap_content"
  android:layout_height="40px"
  android:text="@string/str_button2"
  android:textcolor="@drawable/black"
  android:textsize="18sp"
  android:layout_x="190px"
  android:layout_y="362px"
 >
 </button>
 
</absolutelayout>

五、timeset.xml布局文件中的代码:

<?xml version="1.0" encoding="utf-8"?>
<absolutelayout
 android:id="@+id/layout2"
 android:layout_width="fill_parent"
 android:layout_height="fill_parent"
 xmlns:android="http://schemas.android.com/apk/res/android"
>
 <textview
 android:id="@+id/text1"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:text="@string/str_text1"
 android:textcolor="@drawable/white"
 android:textsize="16sp"
 android:layout_x="10px"
 android:layout_y="32px"
 >
 </textview>
 <textview
 android:id="@+id/text2"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:text="@string/str_text2"
 android:textcolor="@drawable/white"
 android:textsize="16sp"
 android:layout_x="10px"
 android:layout_y="172px"
 >
 </textview>
 <timepicker
 android:id="@+id/tpicker"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:layout_x="100px"
 android:layout_y="12px"
 >
 </timepicker>
 <edittext
 android:id="@+id/medit"
 android:layout_width="52px"
 android:layout_height="40px"
 android:text="15"
 android:textsize="16sp"
 android:layout_x="120px"
 android:layout_y="162px"
 >
 </edittext>
 <textview
 android:id="@+id/text3"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:text="@string/str_text3"
 android:textcolor="@drawable/white"
 android:textsize="16sp"
 android:layout_x="180px"
 android:layout_y="172px"
 >
 </textview>
</absolutelayout>

六、string.xml中的代码:

<?xml version="1.0" encoding="utf-8"?>
<resources>
 <string name="hello">hello world, ex06_10</string>
 <string name="app_name">大明原创闹钟</string>
 <string name="str_button1">设置闹钟</string>
 <string name="str_button2">删除闹钟</string>
 <string name="str_title2">重复响起的闹钟</string>
 <string name="str_title3">大明闹钟一</string>
 <string name="str_title4">大明闹钟二</string>
 <string name="str_default">目前无设置</string>
 <string name="str_text1">开始时间</string>
 <string name="str_text2">重复响起的闹钟</string>
 <string name="str_text3">秒</string>
</resources>

七、color.xml中的代码:

<?xml version="1.0" encoding="utf-8"?>
<resources>
 <drawable name="white">#ffffffff</drawable>
 <drawable name="other">#ff00fff0</drawable>
 <drawable name="black">#000000</drawable>
 <drawable name="blue">#0000ff</drawable>
 <drawable name="red">#ff0000</drawable>
</resources>

 八、androidmanifest.xml中的代码

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
  package="com.cn.daming"
  android:versioncode="1"
  android:versionname="1.0">
 <uses-sdk android:minsdkversion="8" />
 
 <application android:icon="@drawable/icon" android:label="@string/app_name">
  <!-- 註冊receiver callalarm -->
  <receiver android:name=".callalarm" android:process=":remote" />
  <activity android:name=".mainactivity"
     android:label="@string/app_name">
   <intent-filter>
    <action android:name="android.intent.action.main" />
    <category android:name="android.intent.category.launcher" />
   </intent-filter>
  </activity>
  <activity android:name=".alarmalert"
    android:label="@string/app_name">
  </activity>
 </application>
</manifest> 

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。