第一行代码Androiod第三版 笔记 第九章丰富你的程序,运用手机多媒体
创始人
2024-05-09 18:19:31
0

文章目录

  • 前言
  • 一、通知渠道是什么?
  • 二、快速入门
    • 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//这个参数会放进两个  一个是内容 一个是渠道IDval 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了

相关内容

热门资讯

【NI Multisim 14...   目录 序言 一、工具栏 🍊1.“标准”工具栏 🍊 2.视图工具...
银河麒麟V10SP1高级服务器... 银河麒麟高级服务器操作系统简介: 银河麒麟高级服务器操作系统V10是针对企业级关键业务...
不能访问光猫的的管理页面 光猫是现代家庭宽带网络的重要组成部分,它可以提供高速稳定的网络连接。但是,有时候我们会遇到不能访问光...
AWSECS:访问外部网络时出... 如果您在AWS ECS中部署了应用程序,并且该应用程序需要访问外部网络,但是无法正常访问,可能是因为...
Android|无法访问或保存... 这个问题可能是由于权限设置不正确导致的。您需要在应用程序清单文件中添加以下代码来请求适当的权限:此外...
北信源内网安全管理卸载 北信源内网安全管理是一款网络安全管理软件,主要用于保护内网安全。在日常使用过程中,卸载该软件是一种常...
AWSElasticBeans... 在Dockerfile中手动配置nginx反向代理。例如,在Dockerfile中添加以下代码:FR...
AsusVivobook无法开... 首先,我们可以尝试重置BIOS(Basic Input/Output System)来解决这个问题。...
ASM贪吃蛇游戏-解决错误的问... 要解决ASM贪吃蛇游戏中的错误问题,你可以按照以下步骤进行:首先,确定错误的具体表现和问题所在。在贪...
月入8000+的steam搬砖... 大家好,我是阿阳 今天要给大家介绍的是 steam 游戏搬砖项目,目前...