赞
踩
接下来在java代码中来实现功能,
第一部分:要有一个数据存储的功能,这里我们可以用到sharedpreferences,因为它是一个轻量级的数据存储我们需要用到的,在我们的程序里面我们需要把我们设置的时间存储起来,因为如果我们不慎把我们的程序关掉之后打开之后要保存上次设置的时间。
SharedPreferences settings = getPreferences(Activity.MODE_PRIVATE);
time1String = settings.getString("TIME1", defalutString);
time2String = settings.getString("TIME2", defalutString);
time3String = settings.getString("TIME3", defalutString);
第二部分:我们要在设置的按钮中添加点击事件,在点击事件中,首先要获取系统时间,利用下面这些代码来获取系统时间。
Calendar c = Calendar.getInstance();
c.setTimeInMillis(System.currentTimeMillis());
int mHour = c.get(Calendar.HOUR_OF_DAY);
int mMinute = c.get(Calendar.MINUTE);
接下来我们要设置一个需要闹钟提醒的时间,这样的话我们就需要new 一个TimePickerDialog用来接收我们设置的时间,然后调用onTimeSet的方法来设置我们想要设置的时间。
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);
第三部分:是用pendingIntent实现跳转,pendingInetnt和Intent最大的不同便是可以实现延迟跳转的功能。接下来我们还要用到一个全局计时器AlarmManager的东西,在这里面我们可以通过am.set()的方法来设置我们的闹钟的提醒的方式,这里有很多种提醒方式,我们用到的是RTC_WAKEUP的方法,这种方法可以做到我们的手机在什么状态下都会进行提醒。
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
);
第四部分:就是添加删除闹钟功能,用cancel(PendingIntent pi)函数来取消AlarmManager的定时服务即可。
第五部分:实现计时器功能。
import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.app.Activity; import android.view.Menu; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.TextView; public class MainActivity extends Activity { private TextView mint; private TextView sec; private Button start; private Button reset; private long timeusedinsec; private boolean isstop = false; private Handler mHandler = new Handler() { @Override public void handleMessage(Message msg) { // TODO Auto-generated method stub super.handleMessage(msg); switch (msg.what) { case 1: // 添加更新ui的代码 if (!isstop) { updateView(); mHandler.sendEmptyMessageDelayed(1, 1000); } break; case 0: break; } } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initViews(); } private void initViews() { mint = (TextView) findViewById(R.id.mint); sec = (TextView) findViewById(R.id.sec); reset = (Button) findViewById(R.id.reset); start = (Button) findViewById(R.id.start); reset.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { // TODO Auto-generated method stub mint.setText("00"); sec.setText("00"); start.setText("start"); timeusedinsec=0; isstop=true; } }); start.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { // TODO Auto-generated method stub mHandler.removeMessages(1); String aaa=start.getText().toString(); if(aaa.equals("start")){ mHandler.sendEmptyMessage(1); isstop = false; start.setText("pause"); }else { mHandler.sendEmptyMessage(0); isstop = true; start.setText("start"); } } }); } private void updateView() { timeusedinsec += 1; int minute = (int) (timeusedinsec / 60)%60; int second = (int) (timeusedinsec % 60); if (minute < 10) mint.setText("0" + minute); else mint.setText("" + minute); if (second < 10) sec.setText("0" + second); else sec.setText("" + second); } }
一些细节:在res文件下新建raw文件夹放入一首MP3作为闹钟音乐,在闹钟响时进行播放。在manfest中要进行注册 receiver>必须要注册,否则时间到了收不到。
<receiver android:name=".CallAlarm" android:process=".remote"></receiver>
最终闹钟效果如图所示:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。