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

相关文章

基于Qt开发一个简单的OFD阅读器

《基于Qt开发一个简单的OFD阅读器》这篇文章主要为大家详细介绍了如何使用Qt框架开发一个功能强大且性能优异的OFD阅读器,文中的示例代码讲解详细,有需要的小伙伴可以参考一下... 目录摘要引言一、OFD文件格式解析二、文档结构解析三、页面渲染四、用户交互五、性能优化六、示例代码七、未来发展方向八、结论摘要

最新版IDEA配置 Tomcat的详细过程

《最新版IDEA配置Tomcat的详细过程》本文介绍如何在IDEA中配置Tomcat服务器,并创建Web项目,首先检查Tomcat是否安装完成,然后在IDEA中创建Web项目并添加Web结构,接着,... 目录配置tomcat第一步,先给项目添加Web结构查看端口号配置tomcat    先检查自己的to

SpringBoot集成SOL链的详细过程

《SpringBoot集成SOL链的详细过程》Solanaj是一个用于与Solana区块链交互的Java库,它为Java开发者提供了一套功能丰富的API,使得在Java环境中可以轻松构建与Solana... 目录一、什么是solanaj?二、Pom依赖三、主要类3.1 RpcClient3.2 Public

Android数据库Room的实际使用过程总结

《Android数据库Room的实际使用过程总结》这篇文章主要给大家介绍了关于Android数据库Room的实际使用过程,详细介绍了如何创建实体类、数据访问对象(DAO)和数据库抽象类,需要的朋友可以... 目录前言一、Room的基本使用1.项目配置2.创建实体类(Entity)3.创建数据访问对象(DAO

Servlet中配置和使用过滤器的步骤记录

《Servlet中配置和使用过滤器的步骤记录》:本文主要介绍在Servlet中配置和使用过滤器的方法,包括创建过滤器类、配置过滤器以及在Web应用中使用过滤器等步骤,文中通过代码介绍的非常详细,需... 目录创建过滤器类配置过滤器使用过滤器总结在Servlet中配置和使用过滤器主要包括创建过滤器类、配置过滤

SpringBoot整合kaptcha验证码过程(复制粘贴即可用)

《SpringBoot整合kaptcha验证码过程(复制粘贴即可用)》本文介绍了如何在SpringBoot项目中整合Kaptcha验证码实现,通过配置和编写相应的Controller、工具类以及前端页... 目录SpringBoot整合kaptcha验证码程序目录参考有两种方式在springboot中使用k

在 VSCode 中配置 C++ 开发环境的详细教程

《在VSCode中配置C++开发环境的详细教程》本文详细介绍了如何在VisualStudioCode(VSCode)中配置C++开发环境,包括安装必要的工具、配置编译器、设置调试环境等步骤,通... 目录如何在 VSCode 中配置 C++ 开发环境:详细教程1. 什么是 VSCode?2. 安装 VSCo

正则表达式高级应用与性能优化记录

《正则表达式高级应用与性能优化记录》本文介绍了正则表达式的高级应用和性能优化技巧,包括文本拆分、合并、XML/HTML解析、数据分析、以及性能优化方法,通过这些技巧,可以更高效地利用正则表达式进行复杂... 目录第6章:正则表达式的高级应用6.1 模式匹配与文本处理6.1.1 文本拆分6.1.2 文本合并6

python与QT联合的详细步骤记录

《python与QT联合的详细步骤记录》:本文主要介绍python与QT联合的详细步骤,文章还展示了如何在Python中调用QT的.ui文件来实现GUI界面,并介绍了多窗口的应用,文中通过代码介绍... 目录一、文章简介二、安装pyqt5三、GUI页面设计四、python的使用python文件创建pytho

SpringBoot整合InfluxDB的详细过程

《SpringBoot整合InfluxDB的详细过程》InfluxDB是一个开源的时间序列数据库,由Go语言编写,适用于存储和查询按时间顺序产生的数据,它具有高效的数据存储和查询机制,支持高并发写入和... 目录一、简单介绍InfluxDB是什么?1、主要特点2、应用场景二、使用步骤1、集成原生的Influ