文档章节

Android闹钟

huiyun-yoyo
 huiyun-yoyo
发布于 2016/12/27 10:37
字数 272
阅读 52
收藏 1

设置闹钟

new TimePickerDialog(this, new TimePickerDialog.OnTimeSetListener() {
           @Override
           public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
               SPUtil.setNotificationTime(Tools.getNotificationTime(hourOfDay, minute));
               Calendar calendar1 = Calendar.getInstance();
               calendar1.setTimeInMillis(System.currentTimeMillis());
               calendar1.set(Calendar.HOUR_OF_DAY, hourOfDay);
               calendar1.set(Calendar.MINUTE, minute);
               calendar1.set(Calendar.SECOND, 0);
               calendar1.set(Calendar.MILLISECOND, 0);
               am = (AlarmManager) getSystemService(ALARM_SERVICE);
               start_alarm = new Intent(MessageActivity.this, ToastActivity.class);
               sender = PendingIntent.getActivity(MessageActivity.this, 1, start_alarm, 0);
               am.setRepeating(AlarmManager.RTC_WAKEUP, calendar1.getTimeInMillis(), repeat_time, sender);
               String s =Tools.changeTimeStyle(calendar1.get(Calendar.HOUR_OF_DAY),calendar1.get(Calendar.MINUTE));
               showTimeTxt.setText(s);
               SPUtil.setNotificationTime(s);
               can_cancle = true;
           }
       },
               calendar.get(Calendar.HOUR_OF_DAY),
               calendar.get(Calendar.MINUTE), true).show();

ToastActivity

public class ToastActivity extends AppCompatActivity {
private Uri ringUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_ALARM);
    private final MediaPlayer mp = new MediaPlayer();
    private Vibrator vibrator;
    private PowerManager.WakeLock mWakelock;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);//hide title
        Window win = getWindow();
        WindowManager.LayoutParams winParams = win.getAttributes();
        winParams.flags |= (WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD
                | WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED
                | WindowManager.LayoutParams.FLAG_ALLOW_LOCK_WHILE_SCREEN_ON
                | WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);

        vibrator = (Vibrator) getSystemService(VIBRATOR_SERVICE);

        startMedia();//播放音乐
        startVibrator();//震动
        showAlarmDialog();

    }

    @Override
    protected void onResume() {
        super.onResume();
        if (mWakelock == null) {
            PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
            mWakelock = pm.newWakeLock(PowerManager.ACQUIRE_CAUSES_WAKEUP
                    | PowerManager.SCREEN_DIM_WAKE_LOCK, this.getClass()
                    .getCanonicalName());
            mWakelock.acquire();
        }
    }

    @Override
    protected void onPause() {
        super.onPause();
        if (mWakelock != null && mWakelock.isHeld()) {
            mWakelock.release();
            mWakelock = null;
        }
    }


    private void showAlarmDialog() {
        new AlertDialog.Builder(this).setTitle("闹钟响了")
                .setMessage(Tools.getSharedWeather(MyApplication.getCityData(SPUtil.getGPSCity())))
                .setPositiveButton("关闭闹钟", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        mp.stop();
                        vibrator.cancel();
                        ToastActivity.this.finish();
                    }
                }).show();
    }

    private void startVibrator() {
        long[] pattern = {500, 1000, 500, 1000};//停止  开始  停止   开始
        vibrator.vibrate(pattern, 0);
    }

    private void startMedia() {
        try {
            mp.setDataSource(this, ringUri);
            mp.prepare();
            mp.start();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

添加唤醒锁屏权限:

<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.WAKE_LOCK"/>

© 著作权归作者所有

上一篇: View属性
下一篇: String
huiyun-yoyo
粉丝 1
博文 43
码字总数 33793
作品 0
瑞安
程序员
私信 提问
加载中

评论(1)

PatrickWQy
PatrickWQy
mark
android 实现本地定时推送(兼容)

首先写几点感悟: 做兼容真的很累很费劲~ android 8.0 广播部分不再支持动态注册,所以应该用service来实现定时推送功能 无论是闹钟还是通知,都得做兼容处理,android 8.0通知必须加channel...

晓乐凡
2018/05/03
0
0
AlarmManager类的应用(实现闹钟功能)

1、AlarmManager,顾名思义,就是“提醒”,是Android中常用的一种系统级别的提示服务,可以实现从指定时间开始,以一个固定的间隔时间执行某项操作,所以常常与广播(Broadcast)连用,实现...

rotiwen
2013/03/15
0
0
学习Android闹钟源代码(三)-AlarmClock类分析(part1)

android的时钟,也就是闹钟应用,从桌面的widget直接点进去的会打开AlarmClock这个Activity. 好像我平常都不上图的,今天就上两张图先。 一张是应用界面图如下:(改天再上传了,好像今天osc...

李海珍
2012/09/16
0
8
学习Android闹钟源代码(一)-代码准备

由于自己的一个应用提醒是很重要的一部分,所以就得好好学习下Android自带的闹钟的实现了。 android自带应用在源代码目录的package/apps目录下。 闹钟应用的名字叫做DeskClock(说明:我下载的...

李海珍
2012/09/16
0
0
Android 平台上长连接的实现

Android 平台上长连接的实现 为了不让 NAT 表失效,我们需要定时的发心跳,以刷新 NAT 表项,避免被淘汰。 Android 上定时运行任务常用的方法有2种,一种方法用 Timer,另一种是AlarmManage...

jeffzhao
2013/02/28
0
1

没有更多内容

加载失败,请刷新页面

加载更多

HeyUI组件库按需加载功能上线,盘点HeyUI组件库有哪些独特功能?

HeyUI组件库 如果你还不了解heyui组件库,欢迎来我们的官网或者github参观。 官网 github 当然,如果能给我们一颗✨✨✨,那是最赞的了! 按需加载 当heyui组件库的组件越来越多的时候,按需...

vvpvvp
32分钟前
9
0
Dockerfile文件详解

Dockerfile文件详解 什么是dockerfile? Dockerfile是一个包含用于组合映像的命令的文本文档。可以使用在命令行中调用任何命令。 Docker通过读取Dockerfile中的指令自动生成映像。 docker bui...

Jeam_
45分钟前
2
0
阿里云PolarDB发布重大更新 支持Oracle等数据库一键迁移上云

5月21日,阿里云PolarDB发布重大更新,提供传统数据库一键迁移上云能力,可以帮助企业将线下的MySQL、PostgreSQL和Oracle等数据库轻松上云,最快数小时内迁移完成。据估算,云上成本不到传统...

zhaowei121
53分钟前
1
0
在数据数据探索过程中的一些常用操作

###pandas在做数据探索时,分组统计均值和中位数参考资料:http://www.cnblogs.com/nxld/p/6058591.htmlhttp://python.jobbole.com/85742/按字典重新赋值,可以直接使用pandas中的repla...

KYO4321
56分钟前
1
0
好程序员分享干货 弹性分布式数据集RDD

一、RDD定义 RDD(Resilient Distributed Dataset)叫做分布式数据集,是Spark中最基本的数据抽象,它代表一个不可变(数据和元数据)、可分区、里面的元素可并行计算的集合。其特点在于自动容...

好程序员IT
57分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部