Android:Moring-早安闹钟开发过程记录(二)

2023-10-11 00:30

本文主要是介绍Android:Moring-早安闹钟开发过程记录(二),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

续接上一篇文章

1.叫醒功能实现

  • 叫醒对话框
    这个对话框是不是很丑啊?这个对话框之所以丑的原因是因为我懒~


    闹钟对话框.png


    分析一下这个对话框的特点,就是三点

    • a.要根据用户选择的赖床指数显示不同难度的题目
    • b.要将用户输入的结果跟正确答案进行对比
    • c.不允许退出(这样才能达到暴力叫醒),返回键也无效
      a
      在dialog上的代码就是setMessage(),在AlarmReceiverzhong 根据LazyLevel生成两个随机数
      private int youCantSleep() {
      Random a=new Random();
      if(lazylevel==1){A = a.nextInt(20)+5;B = a.nextInt(20)+5;
      }else if(lazylevel==2){A = a.nextInt(99)+1;B = a.nextInt(99)+1;while(B<50) B+=10;
      }else if(lazylevel==3){A = a.nextInt(200)+1;B = a.nextInt(200)+1;while (B<80)    B+=10;while(A<80)    A+=10;
      }else if(lazylevel==4){A = a.nextInt(500)+1;B = a.nextInt(500)+1;while(B<80)    B+=10;while(A<200)    A+=30;
      } 
      return A*B;
      }
      b
      这个比较简单,positiveButton的监听中if判断一下正确答案和输入答案,正确的话就dialog.dismiss();
      c
      -首先Alertdialog.Builder有一个方法setCancelable(false);传入false将不可以点击取消,点击Home键都不可以被取消,只能通过确定。当然杀进程是可以的~
      builder.setCancelable(false);
      -然后将dialog设置成为系统级别
      AlertDialog dialog=builder.create();
      WindowManager.LayoutParams params = dialog.getWindow().getAttributes();
      params.type = WindowManager.LayoutParams.TYPE_SYSTEM_ALERT;
      这里需要一个权限
      <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
  • 播放闹钟铃声
    启动一个Service来播放音乐,播放的音乐由AlarmReceiver通过Intent传递过去

    • 启动AlarmService
      Intent service=new Intent(context, AlarmRingService.class);
      service.putExtra("resid", resid);
      context.startService(service);
    • AlarmService在onStartCommand中获取到数据
      //拿到用户选择的那个铃声
      Song=intent.getStringExtra("resid");if (Song==null){
      //    为了程序的健壮性,判断一下,以免出现不必要的异常Song="everybody.mp3";}
      ringTheAlarm(Song);
    • 播放音乐(MediaManager)
      核心代码
      mPlayer=new MediaPlayer();
      assetFileDescriptor = this.getAssets().openFd(song);
      mPlayer.reset();
      mPlayer.setAudioStreamType(AudioManager.STREAM_ALARM);
      mPlayer.setDataSource(assetFileDescriptor.getFileDescriptor(), assetFileDescriptor.getStartOffset(), assetFileDescriptor.getLength());
      重点
      mPlayer.setAudioStreamType(AudioManager.STREAM_ALARM);
      注意 该方法必须在prepare()之前调用,否则无效!
      该方法将这个MediaPlayer设置成为某一个特定的媒体类型,这里设置成为STREAM_ALARM,这样可以实现调节闹钟音量不会影响其他音量,避免用户设置为手机静音后闹钟失效。
  • 开启震动

    private void startVibrate() {mVibrator = (Vibrator)getSystemService(VIBRATOR_SERVICE);if(mVibrator.hasVibrator()){mVibrator.vibrate(new long[]{500, 1500, 500, 1500}, 0);//off on off on  repeatmode}
    }
  • 停止服务
    当用户关闭闹钟时停止服务,因此关闭音乐和关闭震动的代码写在onDestroy中
    @Overridepublic
    void onDestroy() {super.onDestroy();stopTheAlarm();stopVibrate();
    }

    结尾

    简单记录了下开发的思路,以及一些小的,但是容易漏掉的知识点,调试的时候会很让人抓狂的。下一篇文章分析FragmentWeather中实现的逻辑
未完待续...

这篇关于Android:Moring-早安闹钟开发过程记录(二)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:https://blog.csdn.net/qiaoxiaoxi621/article/details/50540682
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/184221

相关文章

Jenkins的安装与简单配置过程

《Jenkins的安装与简单配置过程》本文简述Jenkins在CentOS7.3上安装流程,包括Java环境配置、RPM包安装、修改JENKINS_HOME路径及权限、启动服务、插件安装与系统管理设置... 目录www.chinasem.cnJenkins安装访问并配置JenkinsJenkins配置邮件通知

Python开发简易网络服务器的示例详解(新手入门)

《Python开发简易网络服务器的示例详解(新手入门)》网络服务器是互联网基础设施的核心组件,它本质上是一个持续运行的程序,负责监听特定端口,本文将使用Python开发一个简单的网络服务器,感兴趣的小... 目录网络服务器基础概念python内置服务器模块1. HTTP服务器模块2. Socket服务器模块

Conda国内镜像源及配置过程

《Conda国内镜像源及配置过程》文章介绍Conda镜像源使用方法,涵盖临时指定单个/多个源、永久配置及恢复默认设置,同时说明main(官方稳定)、free(逐渐弃用)、conda-forge(社区更... 目录一、Conda国内镜像源二、Conda临时使用镜像源指定单个源临时指定多个源创建环境时临时指定源

mybatisplus的逻辑删除过程

《mybatisplus的逻辑删除过程》:本文主要介绍mybatisplus的逻辑删除过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录myBATisplus的逻辑删除1、在配置文件中添加逻辑删除的字段2、在实体类上加上@TableLogic3、业务层正常删除即

Android 缓存日志Logcat导出与分析最佳实践

《Android缓存日志Logcat导出与分析最佳实践》本文全面介绍AndroidLogcat缓存日志的导出与分析方法,涵盖按进程、缓冲区类型及日志级别过滤,自动化工具使用,常见问题解决方案和最佳实... 目录android 缓存日志(Logcat)导出与分析全攻略为什么要导出缓存日志?按需过滤导出1. 按

通过配置nginx访问服务器静态资源的过程

《通过配置nginx访问服务器静态资源的过程》文章介绍了图片存储路径设置、Nginx服务器配置及通过http://192.168.206.170:8007/a.png访问图片的方法,涵盖图片管理与服务... 目录1.图片存储路径2.nginx配置3.访问图片方式总结1.图片存储路径2.nginx配置

Java 与 LibreOffice 集成开发指南(环境搭建及代码示例)

《Java与LibreOffice集成开发指南(环境搭建及代码示例)》本文介绍Java与LibreOffice的集成方法,涵盖环境配置、API调用、文档转换、UNO桥接及REST接口等技术,提供... 目录1. 引言2. 环境搭建2.1 安装 LibreOffice2.2 配置 Java 开发环境2.3 配

基于Spring Boot 的小区人脸识别与出入记录管理系统功能

《基于SpringBoot的小区人脸识别与出入记录管理系统功能》文章介绍基于SpringBoot框架与百度AI人脸识别API的小区出入管理系统,实现自动识别、记录及查询功能,涵盖技术选型、数据模型... 目录系统功能概述技术栈选择核心依赖配置数据模型设计出入记录实体类出入记录查询表单出入记录 VO 类(用于

MySQL连表查询之笛卡尔积查询的详细过程讲解

《MySQL连表查询之笛卡尔积查询的详细过程讲解》在使用MySQL或任何关系型数据库进行多表查询时,如果连接条件设置不当,就可能发生所谓的笛卡尔积现象,:本文主要介绍MySQL连表查询之笛卡尔积查... 目录一、笛卡尔积的数学本质二、mysql中的实现机制1. 显式语法2. 隐式语法3. 执行原理(以Nes

Python38个游戏开发库整理汇总

《Python38个游戏开发库整理汇总》文章介绍了多种Python游戏开发库,涵盖2D/3D游戏开发、多人游戏框架及视觉小说引擎,适合不同需求的开发者入门,强调跨平台支持与易用性,并鼓励读者交流反馈以... 目录PyGameCocos2dPySoyPyOgrepygletPanda3DBlenderFife