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>


 


                
  • 16
    点赞
  • 45
    收藏
    觉得还不错? 一键收藏
  • 99
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 99
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值