第一行代码Androiod第三版 笔记 第九章丰富你的程序,运用手机多媒体

news2024/11/29 4:33:29

文章目录

  • 前言
  • 一、通知渠道是什么?
  • 二、快速入门
    • 1. 书写通知
    • 2.通知有了 ,点击也没动静啊- PendingIntent
    • 3 点击完之后,通知不消失怎么办
    • 4 通过setStyle() 来是实现长文字通知
    • 5 还想放张图
    • 6 不同通知之间也有等级差异
  • 三、 使用相机
    • 7 调用相机
    • 8 从相册中选照片
  • 放个音乐
    • 9 播放音频
  • 总结


前言

如何实现安卓端的通知


一、通知渠道是什么?

顾名思义,就是每条通知都要属于一个对应的渠道。每个应用程序都可以自由地创建当前应用拥有哪些通知渠道,但是这些通知渠道的控制权是掌握在用户手上的。用户可以自由地选择这些通知渠道的重要程度,是否响铃、是否振动或者是否要关闭这个渠道的通知。
在这里插入图片描述

二、快速入门

通知的用法很灵活,可以在Activity 也可以在Broadcast Receiver里 在后续还会出现在service里

1. 书写通知

第一行代码里使用的时AndriodX库中提供的Notification Compat类

//首先需要一个NotificationManager对通知进行管理  getSystemService() 
     val manager = getSysteService(Context.NOTIFICATION_SERVICE) as NotificationManager
   //用于接收字符串参数用于确定获取系统的哪个服务 这里我们传入Context.NOTIFICATION_SERVICE

    //这个参数会放进两个  一个是内容 一个是渠道ID
    val notification =NotificationCompat.Builder(context,chanelId)
        //放进四个设置方法
        .setContentTitle(" welcome this world")
        .setContentText(" welcome")
        .setSmallIcon(R.drawable.ic_launcher_foreground)
        .setLargeIcon(R.drawable.ic_launcher_foreground)
        //上面四个应该不用解释了
        .build()
    manager.notify(1,notification)
}

因为第一行代码太多坑了 ,索性只看伪代码 参透逻辑 不然等咱边修bug边打代码 得打到明年 效果如下图所示

在这里插入图片描述
现在只能看,不能点击,点击并不会跳转,接下来就要用到PendingIntent

2.通知有了 ,点击也没动静啊- PendingIntent

根据需要来判断使用的是 getActivity() , getService(),getBroadcast()
参数:
- 第一个一直是context,
- 第二个参数 用不到(他是这么写的)传入0即可,
- 第三个参数是一个Intent对象,我们可以通过这个对象构建出
-第四个参数用于确定PendingIntent的行为,有FLAG_ONE_SHOT、FLAG_NO_CREATE、FLAG_CANCEL_CURRENT和FLAG_UPDATE_CURRENT这4种值可选,通常情况下这个参数传入0就可以了。

sendNotic.setOnClickLisenter{
            //先用Intent 表达NofiticationActivity 的意图,然后价格构建好的Intent对象传入
//            getActivity()方法里
            val intent =Intent(this,MpofocatopmActovotu::class.java)
            val pi= PendingIntent.getActiiy(this,0.intent,0)
            val notification =NotificationCompat.Builder(this,"normal")
                ....
        
        }

3 点击完之后,通知不消失怎么办

.setAutoCancel(true)
.build()

可以看到,setAutoCancel()方法传入true,就表示当点击这个通知的时候,通知会自动取消。

4 通过setStyle() 来是实现长文字通知

 ...
    .setStyle(NotificationCompat.BigTextStyle().bigText("  长文字段落")).buider()

通过实例化对象NotificationCompat类的BigTextStyle,来封装长文字信息 ,.setStyle() 代替了原来的 .setContentText() 方法

5 还想放张图

换汤不换药 同样在NotificationCompat类中找,用BigPictureStyle()对象的bigpicture()方法 将图片传入, 通过

.setStyle(NotificationCompat.BigPictureStyle().bigPictureStyle().bigPicture(
            BitmapFactory.decodeResource(resourc,R.drawable.big_image)
      )).builder()
    //通过BitmapFactory的decodeResource()方法将图片解析成Bitmap对象,在传入bigPicture()方法中
}

在这里插入图片描述

6 不同通知之间也有等级差异

等级高的通知渠道发出的通知可以弹出横幅 发出声音,而低重要等级通知渠道发出的通知可能会在某些情况下被屏蔽,而且可能被更改显示的顺序
开发者 只能在创建时更改一次,而用户可以根据需求自己更改重要等级

我们发的微信会横屏出来 也是因为 通知等级 是高

val channel12 = NotificationChannel(" importtant","Important",NotificationManager.IMPORTANCE_HIGH)
     manager.createNotificationChannel(channel12)

在这里插入图片描述

三、 使用相机

7 调用相机

调用摄像头的具体逻辑
布局文件里有两个空间 Button 和 ImageView
Button启动摄像头, imageView 用于保留相片的位置

  takePhoto.setOnClickListener{
        //创建File对象,用于存储拍照后的照片
        outputImage =File(externalCacheDir,"output_image.jpg")
        //我们将图片命名为output_image 并存放在手机SD卡的应用关联缓存目录下, SD卡中钻们用于存放应用缓存数据的位置

存储在应用关联缓存目录下 可以避免读写SD卡的操作,在android10以后只能通过作用域来读取不能直接读取SD

  outputImage.createNewFile()
            imageUri = if(Build.VERSION.SDK_INT >=Build.VERSION_CODES.N)
            {
                FileProvider.getUriForFile(this,"com.hope.cameraalbumtest.fileprovider",outputImage)   //getUriForFile()方法将File对象转化为Uri对象
         

            }else{
                Uri.fromFile(outputImage)
            }

getUriForFile() 接收三个参数 第一个参数要传入 content对象 第二个对象可以是任意一个唯一的字符串,第三个参数则是刚刚创建的File对象,
之所以要进行

 //启动相机
val intent = Intent(" android.media.action.IMAGE_CAPTURE")
intent.putExtra(MediaStore,EXTRA_OUTPUT,imageUri)
startActivityForResult(intent,takePhoto)

构建一个Intent对象,并将这个Intent的action指定为android.media.action.IMAGE_CAPTURE,再调用Intent的putExtra()方法指定图片的输出地址,这里填入刚刚得到的Uri对象,最后调用startActivityForResult()启动Activity

这部分就写到者这了要是完全的话也是写不完的

8 从相册中选照片

//打开文件选择器

val intent = Intent(Intent.ACTION_OPEN_DOCUMENT)
intent.addCategory(Intent.CATEGORY_OPENABLE)
//指定只显示图片
intent.type = " image/*"
startActivityForResult(intent, fromAlbum)

先创建一个Inent对象, 并将action的指定为Intent.ACTION_OPEN_DOCUMENT 表示打开系统的文件选择器

 suer.onActivityResult(requestCode,resultCode,data)
        when(requestCode)
        {
            ....
           fromAlbum-> {
               if(resultCode == Activity.RESULT_OK&& data!=null)
               {
                   data.data?.let{
                       uri->  //将选择的图片显示
                       val bitmap = getBitmapFromUri(uri)
                       imageView.setImageBitmap(bitmap)
                       
---

放个音乐

9 播放音频

这里用到了MediaPlayer类 如下是一些使用方法
在这里插入图片描述
Media的工作流程,首先需要创建一个MediaPlayer对象,然后调用setDataSource()方法设置音频文件的路径,再调用prepare()方法使MediaPlayer进入准备状态,接下来调用start()方法就可以开始播放音频,调用pause()方法就会暂停播放,调用reset()方法就会停止播放。
在这里插入图片描述

总结

提示::本来还差一个视频 不写了, 休息一下 下午看Java了

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/152846.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux工具学习之【gcc/g++】

✨个人主页: Yohifo 🎉所属专栏: Linux学习之旅 🎊每篇一句: 图片来源 🎃操作环境: CentOS 7.6 阿里云远程服务器 Whatever is worth doing is worth doing well. 任何值得去做的事情&#xff0…

SpringBoot中使用Swagger详解

在Spring Boot中规范的使用Swagger进行接口测试 文章目录Swagger是什么?为什么要用Swagger?准备工作创建项目编写接口验证高级配置文档注释接口过滤自定义响应SwaggerUI的使用遇到的问题:Swagger是什么? Swagger是一套基于OpenAP…

【Kubernetes 企业项目实战】02、基于 Prometheus 和 K8s 构建智能化监控告警系统(上)

目录 一、Prometheus 基本介绍 二、Prometheus 特点 样本 三、Prometheus 组件介绍 四、Prometheus 工作流程 五、Prometheus 和 zabbix 对比分析 六、Prometheus 的几种部署模式 6.1 基本高可用模式 6.2 基本高可用 远程存储 6.3 基本 HA 远程存储 联邦集群方案…

Word文档内容如何添加双删除线

我们有时需要在Word里面添加双删除线,那么怎么添加呢?看看小编是怎么操作的吧。 首先,运行speedoffice并打开Word文件,选中需要添加双删除线的内容; 然后,点击鼠标右键,在右键菜单中选择“高级…

如何搭建云进销存-采购管理系统?

1、简介 1.1、案例简介 本文将介绍,如何搭建云进销存-采购管理。 1.2、应用场景 云进销存-采购管理应用支持多种商品特性管理,灵活适配不同主流行业商品管理要求,并可通过报表追溯查询,实现差异化的品类管理及分析。 2、设置…

【Linux】-- 进程终止进程等待

目录 深入理解fork 进程终止 进程常见退出场景 退出码 总结 进程等待 进程等待必要性 wait与waitpid 阻塞等待 非阻塞等待 总结 深入理解fork 在linux中fork函数时非常重要的函数,它从已存在进程中创建一个新进程。新进程为子进程,而原进程为…

Rhce第三次作业

1. 基于同一IP的不同端口访问不同的网站(可以通过域名去访问)ipport1 -> 对应一个域名ipport2 -> 对应一个域名使用域名1我应该访问到 ipport1对应的内容使用域名2我应该访问到 ipport2对应的内容/etc/hosts文件下写入ip和域名,进行域名解析写入192.168.137.1…

vue3学习笔记之TransitionTransitionGroup

文章目录Transition&TransitionGroup动画组件1. Transition1.1 Transition API1.2 基于CSS的过渡效果自定义过渡class Animate动画库同时使用 transition 和 animation深层级过渡与显式过渡时长duration(总持续时间)1.3 JavaScript 钩子 GreenSock…

FPGA知识汇集-GPGPU与FPGA

虽然FPGA的功能很强大,但是并非所有的设计都会使用到这样的芯片。很多系统架构师在开始的时候会斟酌到底是使用FPGA还是其他的代替方案,例如GPGPU(通用的图形处理单元)。 由于GPGPU特有的架构和处理能力,在很多现代的设…

SpringBoot+VUE前后端分离项目学习笔记 - 【20 权限菜单 上】

数据库 新建sys_role角色表 与sys_menu菜单表 CREATE TABLE sys_role (id int NOT NULL AUTO_INCREMENT COMMENT id,name varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 名称,description varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 描述…

【C++】list模拟实现

看源码观察结构 由源码可以得知,list的底层是带头双向循环链表 — 结点类模拟实现 list实际上是一个带头双向循环链表,要实现list,则首先需要实现一个结点类,而一个结点需要存储的信息为:数据、前驱指针、后继指针 而对于该结点类的成员函数来说,我们只需实现一个构造函数即…

Linux磁盘根目录扩容

Linux磁盘根目录扩容 1.输入命令:df -hl 红色框标记的呢就是服务器的主目录,我们能看到总容量17G ,已使用2.1G 可用15G 我们要扩张磁盘空间的就是挂载点为:/ (的这个) 2.查询磁盘分区 命令:fdisk -l 我们找到/dev/sdb 这个磁盘名称就是…

Linux常用命令——nethogs命令

在线Linux命令查询工具(http://www.lzltool.com/LinuxCommand) nethogs 终端下的网络流量监控工具 补充说明 有很多适用于Linux系统的开源网络监视工具。比如说,你可以用命令iftop来检查带宽使用情况。netstat用来查看接口统计报告,还有top监控系统当…

CMake快速入门

介绍 之前讲的Makefile的配置跟你当前的系统非常强的相关,例如在Linux或苹果下配置完Makefile,放到Windows下就会有问题,因为编译器会不同、路径会不同等。 如果要做跨平台的软件,要给不同的操作系统,不同的编译环境…

靶机测试Connect-the-dots笔记

靶机描述DescriptionBack to the TopLevel: Beginner-IntermediateUser flag: user.txtRoot flag: root.txtDescription: The machine is VirtualBox compatible but can be used in VMWare as well (not tested but it should work). The DHCP will assign an IP automaticall…

一款兼容双系统、为代码而生的机械键盘--Keychron K3

🔥前言 从去年的9月份记得就有小伙伴发私信问我有没有值得推荐的键盘,前段时间又有几个小伙伴在发私信询问。于是我写下这篇文章去给大家推荐一款十分好用的矮轴机械键盘 > keychron K3蓝牙无线矮轴超薄机械键盘,从而让大家更好的去敲代码&#xff0c…

【PWA学习】4. 使用 Push API 实现消息推送

引言 在接下来的内容里,我们会探究 PWA 中的另一个重要功能——消息推送与提醒(Push & Notification)。这个能力让我们可以从服务端向用户推送各类消息并引导用户触发相应交互 Web Push 效果Push API 和 Notification API 其实是两个独立的技术,完全…

很好用的URL工具类

📢 📢 📢 📣 📣 📣哈喽!大家好,我是「奇点」,江湖人称 singularity。刚工作几年,想和大家一同进步 🤝 🤝一位上进心十足的【Java ToB端…

【C++】deque双端队列

目录deque的原理介绍deque的优点和缺陷deque的原理介绍 1.deque(双端队列):是一种双开口的“连续”空间的数据结构,双开口的含义是:在头尾两端都可以进行插入和删除操作,且时间复杂度为O(1)。 需要注意的是deque并不是真正连续的…

制作一个微信小程序步骤_分享个人微信小程序开发步骤

微信小程序的功能不断提高,以及用户对小程序的使用的增加,使得新一批的流量融入小程序中,越开越多的企业开始开发小程序,想要从中分一碗羹,今天内容就从如何制作一个微信小程序说起,希望对你有帮助。微信小…