闹钟服务

通过AlarmManager开发手机闹钟类的APP,首先一个简单的布局文件:activity_main.xml,另外在res创建一个raw文件夹,把音频文件丢进去! 另外创建一个只有外层布局的activity_clock.xml作为闹钟响时Activity的布局。

    <Button
    android:id="@+id/btn_set"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="设置闹钟" />

<Button
    android:id="@+id/btn_cancel"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="关闭闹钟"
    android:visibility="gone" />
接着是MainActivity.java,也很简单: public class MainActivity extends AppCompatActivity implements View.OnClickListener{
        private Button btn_set;
        private Button btn_cancel;
        private AlarmManager alarmManager;
        private PendingIntent pi;

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            bindViews();
    }

        private void bindViews() {
            btn_set = (Button) findViewById(R.id.btn_set);
            btn_cancel = (Button) findViewById(R.id.btn_cancel);
            alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);

            Intent intent = new Intent(MainActivity.this, ClockActivity.class);
            pi = PendingIntent.getActivity(MainActivity.this, 0, intent, 0);

            btn_set.setOnClickListener(this);
            btn_cancel.setOnClickListener(this);

        }

        @Override
        public void onClick(View v) {
            switch (v.getId()){
                case R.id.btn_set:
                    Calendar currentTime = Calendar.getInstance();
                    new TimePickerDialog(MainActivity.this, 0,
                            new TimePickerDialog.OnTimeSetListener() {
                                @Override
                                public void onTimeSet(TimePicker view,
                                                      int hourOfDay, int minute) {
                    //设置当前时间
                                    Calendar c = Calendar.getInstance();
                    c.setTimeInMillis(System.currentTimeMillis());
                    // 根据用户选择的时间来设置Calendar对象
                    c.set(Calendar.HOUR, hourOfDay);
                    c.set(Calendar.MINUTE, minute);
                    // ②设置AlarmManager在Calendar对应的时间启动Activity
                    alarmManager.set(AlarmManager.RTC_WAKEUP, c.getTimeInMillis(), pi);
                    Log.e("HEHE",c.getTimeInMillis()+"");   //这里的时间是一个unix时间戳
                    // 提示闹钟设置完毕:
                    Toast.makeText(MainActivity.this, "闹钟设置完毕~"+ c.getTimeInMillis(),
                            Toast.LENGTH_SHORT).show();
            }
        }, currentTime.get(Calendar.HOUR_OF_DAY), currentTime
        .get(Calendar.MINUTE), false).show();
            btn_cancel.setVisibility(View.VISIBLE);
            break;

case R.id.btn_cancel:
alarmManager.cancel(pi);
btn_cancel.setVisibility(View.GONE);
Toast.makeText(MainActivity.this, “闹钟已取消”, Toast.LENGTH_SHORT)
.show();
break;
}
}
}
然后是闹铃页面的ClockActivity.java:

    public class ClockActivity extends AppCompatActivity {

        private MediaPlayer mediaPlayer;

        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_clock);
            mediaPlayer = mediaPlayer.create(this,R.raw.pig);
            mediaPlayer.start();
        //创建一个闹钟提醒的对话框,点击确定关闭铃声与页面
            new AlertDialog.Builder(ClockActivity.this).setTitle("闹钟").setMessage("小猪小猪快起床~")
                    .setPositiveButton("关闭闹铃", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            mediaPlayer.stop();
                            ClockActivity.this.finish();
    }
    }).show();
    }
    }
    核心流程如下:
    AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE); 获得系统提供的AlarmManager服务的对象
        Intent设置要启动的组件: Intent intent = new Intent(MainActivity.this, ClockActivity.class);
    PendingIntent对象设置动作,启动的是Activity还是Service,又或者是广播! PendingIntent pi = PendingIntent.getActivity(MainActivity.this, 0, intent, 0);
    调用AlarmManager的set( )方法设置单次闹钟的闹钟类型,启动时间以及PendingIntent对象!alarmManager.set(AlarmManager.RTC_WAKEUP,c.getTimeInMillis(), pi);

运行效果:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值