第一个Android程序——简易闹钟

第一个Android程序——简易闹钟


第一次接触Android开发,面临的第一个难题当然就是环境搭建。开发工具为Android Studio,我是从AS中文官网http://www.android-studio.org/下载的AS,最开始下载的最新版本3.4.1,但由于该版本并不自带SDK,需要自己下载SDK再包进去,第一次弄的时候老是弄不好,就改为下载2.3.3的老版本,自带了SDK安装,配置环境就容易一些。
安装Android Studio之前要先在电脑高级设置的环境变量中配置好JDK和SDK。都是按照网上教程来做的,比较简单,配置好从命令行应该得到这样的效果。 在这里插入图片描述 在这里插入图片描述
在这里插入图片描述
环境配置好之后就要进入程序开发过程。看了很多博客,发现大部分闹钟程序的实现都依赖于AlarmManager(闹钟服务)来实现闹钟功能。主要有五步来实现闹钟功能。
1、通过getSystemService获得闹钟管理者AlarmManager
2、确定设置闹钟的时刻
3、创建要调用的接受程序
4、创建一个挂起的PendingIntent,它可传递给闹钟管理器来调用接受程序
5、使用刚开始创建的时间和PendingIntent设置闹钟
首先在布局文件中设置了三个文本,分别代表三个闹钟,其中一个是可以重复响起的闹钟,在对应加上六个button分别对应闹钟的设置与删除。同时还用三个Text来表示计时器的时间,加上开始和重置按钮。界面效果如下:

在这里插入图片描述
接下来在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>

最终闹钟效果如图所示:
在这里插入图片描述在这里插入图片描述在这里插入图片描述

  • 8
    点赞
  • 57
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值