Android 小闹钟程序

       最近写了个闹钟的程序,看到SharedPreferences在一个程序中可以共享数据,SharedPreferences是一个轻量级的键值存储机制,只可以存储基本数据类型。我就拿来用用,没想到SharedPreferences太好了,真是轻量级的保存数据的好的工具,比sqlite好用多了!以后我又多了一种编程思想了,呵呵,所以现在分享给大家,特别注意这点:这个无法直接在多个程序间共享Preferences数据。程序关闭再打开时间仍然保留你上次设置的时间。这就是Preferences的作用!特别声明:想要源码的请在博客的留言版中留下邮箱。转载请标明出处:http://blog.csdn.net/wdaming1986/article/details/6705902

大家也可以去csdn下载,下载地址:

http://download.csdn.net/source/3536834  

      程序欢迎界面:                                       点击设置闹钟界面:

                                

          点击闹钟设置中的设置后的界面:                       闹钟时间到了弹出dialog:

                          

                  设置重复想起闹钟后的界面:                            点击返回键弹出的提示:

                          

下面请看代码:

一、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>  
原文地址:https://www.cnblogs.com/zhujiabin/p/4460323.html