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-早安闹钟开发过程记录(二)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/184221

相关文章

基于 Cursor 开发 Spring Boot 项目详细攻略

《基于Cursor开发SpringBoot项目详细攻略》Cursor是集成GPT4、Claude3.5等LLM的VSCode类AI编程工具,支持SpringBoot项目开发全流程,涵盖环境配... 目录cursor是什么?基于 Cursor 开发 Spring Boot 项目完整指南1. 环境准备2. 创建

oracle 11g导入\导出(expdp impdp)之导入过程

《oracle11g导入导出(expdpimpdp)之导入过程》导出需使用SEC.DMP格式,无分号;建立expdir目录(E:/exp)并确保存在;导入在cmd下执行,需sys用户权限;若需修... 目录准备文件导入(impdp)1、建立directory2、导入语句 3、更改密码总结上一个环节,我们讲了

SpringBoot 多环境开发实战(从配置、管理与控制)

《SpringBoot多环境开发实战(从配置、管理与控制)》本文详解SpringBoot多环境配置,涵盖单文件YAML、多文件模式、MavenProfile分组及激活策略,通过优先级控制灵活切换环境... 目录一、多环境开发基础(单文件 YAML 版)(一)配置原理与优势(二)实操示例二、多环境开发多文件版

使用docker搭建嵌入式Linux开发环境

《使用docker搭建嵌入式Linux开发环境》本文主要介绍了使用docker搭建嵌入式Linux开发环境,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 目录1、前言2、安装docker3、编写容器管理脚本4、创建容器1、前言在日常开发全志、rk等不同

ShardingProxy读写分离之原理、配置与实践过程

《ShardingProxy读写分离之原理、配置与实践过程》ShardingProxy是ApacheShardingSphere的数据库中间件,通过三层架构实现读写分离,解决高并发场景下数据库性能瓶... 目录一、ShardingProxy技术定位与读写分离核心价值1.1 技术定位1.2 读写分离核心价值二

MyBatis-plus处理存储json数据过程

《MyBatis-plus处理存储json数据过程》文章介绍MyBatis-Plus3.4.21处理对象与集合的差异:对象可用内置Handler配合autoResultMap,集合需自定义处理器继承F... 目录1、如果是对象2、如果需要转换的是List集合总结对象和集合分两种情况处理,目前我用的MP的版本

Java Kafka消费者实现过程

《JavaKafka消费者实现过程》Kafka消费者通过KafkaConsumer类实现,核心机制包括偏移量管理、消费者组协调、批量拉取消息及多线程处理,手动提交offset确保数据可靠性,自动提交... 目录基础KafkaConsumer类分析关键代码与核心算法2.1 订阅与分区分配2.2 拉取消息2.3

Android协程高级用法大全

《Android协程高级用法大全》这篇文章给大家介绍Android协程高级用法大全,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友跟随小编一起学习吧... 目录1️⃣ 协程作用域(CoroutineScope)与生命周期绑定Activity/Fragment 中手

Python实战之SEO优化自动化工具开发指南

《Python实战之SEO优化自动化工具开发指南》在数字化营销时代,搜索引擎优化(SEO)已成为网站获取流量的重要手段,本文将带您使用Python开发一套完整的SEO自动化工具,需要的可以了解下... 目录前言项目概述技术栈选择核心模块实现1. 关键词研究模块2. 网站技术seo检测模块3. 内容优化分析模

基于Java开发一个极简版敏感词检测工具

《基于Java开发一个极简版敏感词检测工具》这篇文章主要为大家详细介绍了如何基于Java开发一个极简版敏感词检测工具,文中的示例代码简洁易懂,感兴趣的小伙伴可以跟随小编一起学习一下... 目录你是否还在为敏感词检测头疼一、极简版Java敏感词检测工具的3大核心优势1.1 优势1:DFA算法驱动,效率提升10