Android闹钟动画,Android实现闹钟小程序

本文详细介绍了如何使用SharedPreferences在Android程序中实现轻量级数据存储,展示了如何设置、修改和删除闹钟时间,并强调了数据仅限于当前应用内的共享。通过实例代码演示了闹钟功能和SharedPreferences的使用技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

程序欢迎界面:

edacab434f92ff4acf2ada905ee640d6.gif

点击设置闹钟界面:

56511446d276c9ccf0584b060dc19262.gif

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

a822e52cea304f75ca3a4fcc935c3cce.gif

闹钟时间到了弹出dialog:

4821a83bc62bfad9e81fae65fac78f0b.gif

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

73adf37f830931d5de33961254725b54.gif

点击返回键弹出的提示:

4cfe43596701d2e02698643629e48b3e.gif

下面请看代码:

一、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布局文件的代码:

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"

>

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"

>

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"

>

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"

>

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"

>

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"

>

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"

>

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"

>

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"

>

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"

>

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"

>

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"

>

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"

>

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"

>

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

android:id="@+id/layout2"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

xmlns:android="http://schemas.android.com/apk/res/android"

>

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"

>

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"

>

android:id="@+id/tPicker"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_x="100px"

android:layout_y="12px"

>

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"

>

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"

>

六、string.xml中的代码:

Hello World, EX06_10

大明原创闹钟

设置闹钟

删除闹钟

重复响起的闹钟

大明闹钟一

大明闹钟二

目前无设置

开始时间

重复响起的闹钟

七、color.xml中的代码:

#FFFFFFFF

#FF00FFF0

#000000

#0000FF

#FF0000

八、AndroidManifest.xml中的代码

package="com.cn.daming"

android:versionCode="1"

android:versionName="1.0">

android:label="@string/app_name">

android:label="@string/app_name">

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值