[源码] Android 上的一些快捷方式,如通知、快捷方式等

news2024/10/11 16:29:02

目录

  • 一、通知
    • 0. 配置权限
    • 1. 测试发送通知代码
    • 2. 打开通知设置界面代码
    • 3. 前台服务创建常驻通知
  • 二、快捷方式
    • 1. 测试添加动态快捷方式代码
  • 三、开发者图块
  • 四、桌面小部件

基于jetpack compose 框架的使用代码

一、通知

参见 官方文档

0. 配置权限

<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />

1. 测试发送通知代码

悬浮提醒

Button(onClick = { 
    val channelId = "notify1"
    val manager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
    val channel = NotificationChannel(channelId, "通知消息1", NotificationManager.IMPORTANCE_HIGH).apply {
        description = "this is a test channel"
        setShowBadge(true)
        enableVibration(true)
        setAllowBubbles(true)
        enableLights(true)
    }
    manager.createNotificationChannel(channel)

    val pendingIntent = PendingIntent.getActivity(context, 1002,
        Intent(this@MainActivity, WakeActivity::class.java),
        PendingIntent.FLAG_MUTABLE)

    val noticeId = Random.nextInt()

    val notification = NotificationCompat.Builder(context, channelId)
        .setSmallIcon(R.drawable.future)
        .setContentTitle("未来")
        .setContentText("未来已经到了")
        .setStyle(NotificationCompat.BigPictureStyle()
            .bigPicture(BitmapFactory.decodeResource(resources, R.drawable.future))
        )
        .setBadgeIconType(NotificationCompat.BADGE_ICON_LARGE)
        .setNumber(10)
        .setAllowSystemGeneratedContextualActions(true)
        .setBubbleMetadata(NotificationCompat.BubbleMetadata.fromPlatform(BubbleMetadata.Builder("a bubble 1").build()))
        .setContentIntent(pendingIntent)
        .build()
    val timer = object:CountDownTimer(3000, 3000){
        override fun onTick(millisUntilFinished: Long) {}
        override fun onFinish() {
            manager.notify(noticeId, notification)
        }
    }
    timer.start()
}){
   Text(text = "测试")
}

2. 打开通知设置界面代码

Button(onClick = { 
	val intentSetting = Intent(Settings.ACTION_APP_NOTIFICATION_SETTINGS)
	intentSetting.putExtra(Settings.EXTRA_APP_PACKAGE, packageName)
	//                            intentSetting.putExtra(Settings.EXTRA_CHANNEL_ID, "chat4")
	startActivity(intentSetting)
}) {
    Text(text = "测试")
}

3. 前台服务创建常驻通知

override fun onCreate() {
    super.onCreate()
    Log.e(TAG, "onCreate: create sevice", )
    val channelId = "foregroundService"
    val manager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
    val channel = NotificationChannel(channelId, "前台服务", NotificationManager.IMPORTANCE_HIGH).apply {
        description = "this is a foregroundService notification"
    }
    manager.createNotificationChannel(channel)
    val pendingIntent = PendingIntent.getActivity(this, 1003,
        Intent(this, MainActivity::class.java),
        PendingIntent.FLAG_MUTABLE)
    val notification = NotificationCompat.Builder(this, channelId)
        .setSmallIcon(R.drawable.future)
        .setContentTitle("实时服务")
        .setContentText("未来已经到了")
        .setContentIntent(pendingIntent)
        .build()
    startForeground(Random.nextInt(), notification)
}

二、快捷方式

参见 官方文档

1. 测试添加动态快捷方式代码

快捷方式

Button(onClick = { 
        ShortcutManagerCompat.addDynamicShortcuts(context, listOf(
          ShortcutInfoCompat.Builder(context, "id1")
            .setShortLabel("Website 1")
             .setLongLabel("Open the website ${Random.nextInt()}")
             .setIcon(IconCompat.createWithResource(context, R.drawable.future))
             .setIntent(Intent(Intent.ACTION_VIEW,
                 Uri.parse("https://www.mysite.example.com/")))
             .build(),
          ShortcutInfoCompat.Builder(context, "id2")
             .setShortLabel("Website 7")
             .setLongLabel("Open the website ${Random.nextInt()}")
             .setIcon(IconCompat.createWithResource(context, R.drawable.future))
             .setIntent(Intent(Intent.ACTION_VIEW,
                 Uri.parse("https://www.mysite.com/")))
             .build(),
         ShortcutInfoCompat.Builder(context, "id4")
             .setShortLabel("Website 6")
             .setLongLabel("Open the website ${Random.nextInt()}")
             .setIcon(IconCompat.createWithResource(context, R.drawable.future))
             .setIntent(Intent(Intent.ACTION_VIEW,
                 Uri.parse("https://www.mysite.com/")))
             .build(),
         ShortcutInfoCompat.Builder(context, "id3")
             .setShortLabel("Website 5")
             .setLongLabel("Open the website ${Random.nextInt()}")
             .setIcon(IconCompat.createWithResource(context, R.drawable.future))
             .setIntent(Intent(Intent.ACTION_VIEW,
                 Uri.parse("https://www.mysite.com/")))
             .build(),
         ShortcutInfoCompat.Builder(context, "id5")
             .setShortLabel("Website 4")
             .setLongLabel("Open the website ${Random.nextInt()}")
             .setIcon(IconCompat.createWithResource(context, R.drawable.future))
             .setIntent(Intent(Intent.ACTION_VIEW,
                 Uri.parse("https://www.mysite.com/")))
             .build(),
         ShortcutInfoCompat.Builder(context, "id6")
             .setShortLabel("Website 3")
             .setLongLabel("Open the website ${Random.nextInt()}")
             .setIcon(IconCompat.createWithResource(context, R.drawable.future))
             .setIntent(Intent(Intent.ACTION_VIEW,
                 Uri.parse("https://www.mysite.com/")))
             .build()
      ))                    
}) {
    Text(text = "测试")
}

三、开发者图块

参见 官方文档

在这里插入图片描述

四、桌面小部件

参见 官方文档

在这里插入图片描述

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

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

相关文章

Matlab梁单元有限元编程:铁木辛柯梁VS欧拉梁

专栏导读 作者简介&#xff1a;工学博士&#xff0c;高级工程师&#xff0c;专注于工业软件算法研究本文已收录于专栏&#xff1a;《有限元编程从入门到精通》本专栏旨在提供 1.以案例的形式讲解各类有限元问题的程序实现&#xff0c;并提供所有案例完整源码&#xff1b;2.单元…

PTA题解 --- 天梯赛的赛场安排(C语言)

今天是PTA题库解法讲解的第八天&#xff0c;今天我们要讲解天梯赛的赛场安排&#xff0c;题目如下&#xff1a; 解题思路&#xff1a; 这个问题的关键在于高效地为参赛学校的队员分配赛场&#xff0c;同时满足给定的条件。我们可以通过以下步骤解决这个问题&#xff1a; 存储每…

[C#]OpenCvSharp使用HoughCircles霍夫圆检测算法找出圆位置并计数

【效果展示】 原图&#xff1a; 找出位置&#xff1a; 【测试环境】 vs2019,netframework4.7.2,opencvsharp4.8.0 【函数用法】 cv2提供了一种圆检测的方法&#xff1a;HoughCircles。该函数的返回结果与参数设置有很大的关系。 检测的图像时9枚钱币&#xff0c;分别使用了…

fiverr是什么?fiverr续费订阅充值教程?

一、什么是Fiverr Fiverr是国际上非常有名的自由职业在线平台&#xff0c;汇聚了大大小小200多个类别的超过80万的自由职业者&#xff0c;网站用户活跃度非常高&#xff0c;发展至今也已经成为一个全球性外包服务平台。Fiverr最初是由Micha Kaufman和Shai Wininger于2010年创立…

注意力机制篇 | YOLOv8改进之添加LSKAttention大核卷积注意力机制 | 即插即用,实现有效涨点

前言:Hello大家好,我是小哥谈。LSKAttention是一种注意力机制,它在自然语言处理领域中被广泛应用。LSKAttention是基于Transformer模型中的Self-Attention机制进行改进的一种变体。在传统的Self-Attention中,每个输入序列中的元素都会与其他元素进行交互,以获取全局的上下…

fastadmin学习08-查询数据渲染到前端

index.php查询&#xff0c;这个是前台的index.php public function index() {$slideImgs Db::name("slideimg")->where("status",,normal)->limit(5)->order(sort,desc)->select();$productList Db::name("product")->where(…

AI绘画:Stable Diffusion的高效操作界面,ComfyUI:安装和使用篇

前言 Stable Diffusion&#xff08;简称SD&#xff09;是一款强大的AI绘画工具&#xff0c;通常通过Web UI操作界面进行使用。然而&#xff0c;对于那些寻求更高效率和个性化工作流的用户来说&#xff0c;ComfyUI提供了一个基于节点流程的操作界面&#xff0c;使得工作流定制更…

【现代控制】线代基础

连续系统 连续系统状态空间离散化 其中&#xff1a;

Go——函数

一. 函数定义 1.1 特点 无需声明原型支持不定变参支持多返回值支持命名返回参数支持匿名函数和闭包函数也是一种类型&#xff0c;一种函数可以赋值给变量不支持嵌套&#xff0c;一个包不能有两个名字一样的函数不支持重载不支持默认参数 1.2 函数声明 函数声明包含一个函数名&…

【ESP32S3 Sense接入语音识别+MiniMax模型+TTS模块语音播报】

【ESP32S3 Sense接入语音识别MiniMax模型TTS模块语音播报】 1. 前言2. 功能模块概述2.1 语音接入2.2 大模型接入2.3 TTS模块接入 3. 先决条件3.1 环境配置3.2 所需零件3.3 硬件连接步骤 4. 核心代码4.1 源码分享4.2 代码解析 5. 上传验证5.1 对话测试5.2 报错 6. 总结 1. 前言 …

Zabbix6 - Web管理网络拓扑/端口流量监控配置手册

Zabbix6 - Web管理网络拓扑/端口流量监控配置手册 概述: 1)Zabbix能监视各种网络参数,保证服务器系统的安全运营;并提供灵活的通知机制以让系统管理员快速定位/解决存在的各种问题。 Zabbix由两部分构成,Zabbix Server与可选组件Zabbix Agent。通过C/S模式采集数据,通过B…

element-ui divider 组件源码分享

今日简单分享 divider 组件&#xff0c;主要有以下两个方面&#xff1a; 1、divider 组件页面结构 2、divider 组件属性 一、组件页面结构 二、组件属性 2.1 direction 属性&#xff0c;设置分割线方向&#xff0c;类型 string&#xff0c;horizontal / vertical&#xff0…

《QT实用小工具·九》设备按钮控件

1、概述 源码放在文章末尾 该项目实现了设备按钮控件&#xff0c;主要包含如下功能&#xff1a; 可设置按钮样式 圆形、警察、气泡、气泡2、消息、消息2。可设置按钮颜色 布防、撤防、报警、旁路、故障。可设置报警切换及对应报警切换的颜色。可设置显示的防区号。可设置是否…

【多线程】震惊~这是我见过最详细的ReentrantLock的讲解

一.与synchronized相比ReentrantLock具有以下四个特点: 可中断&#xff1a;synchronized只能等待同步代码块执行结束&#xff0c;不可以中断&#xff0c;强行终断会抛出异常, 而reentrantlock可以调用线程的interrupt方法来中断等待&#xff0c;继续执行下面的代码。 在获取锁…

学浪m3u8视频解密

学浪的m3u8中的key进行了加密&#xff0c;而且还是难度比较高的vmp&#xff0c;为了让非程序专业用户能够下载学浪的视频&#xff0c;这里将学浪key解密和学浪获取课程集成在一个软件 小浪助手:专门下载学浪视频而生 小浪助手我打包在一起 链接&#xff1a;https://pan.baid…

【信号处理】基于变分自编码器(VAE)的图片典型增强方法实现

关于 深度学习中&#xff0c;经常面临图片数据量较小的问题&#xff0c;此时&#xff0c;对数据进行增强&#xff0c;显得比较重要。传统的图片增强方法包括剪切&#xff0c;增加噪声&#xff0c;改变对比度等等方法&#xff0c;但是&#xff0c;对于后端任务的性能提升有限。…

Redis 主从复制,哨兵模式,集群

目录 主从复制 主从复制 作用 缺陷 主从复制流程 实现Redis主从复制 哨兵模式 主从复制切换的缺点 哨兵的核心功能 哨兵模式原理 哨兵模式的作用 哨兵结构组成 故障转移机制 主节点的选举 实现哨兵模式 集群(Cluster) redis群集有三种模式&#xff0c;主从复制…

解决PDF打开后显示名称与文档名称不一致的问题【不需要word模板!!!】

文章目录 简介原因解决办法参考资料 简介 最近&#xff0c;博主在使用Acobat打开一个PDF文件的时候发现&#xff1a;打开后的PDF文件标签跟该文件的存储名称不一致。这是一件令人并不十分愉快和顺心的事情&#xff0c;网上搜索得到的解决办法基本上都是出奇的相似&#xff0c;…

css心跳动画

图标引入 <img class"icon" src"heart.svg" alt"" srcset""> CSS代码 <style>.icon {animation:bpm 1s linear,pulse 0.75s 1s linear infinite;}keyframes pulse {from,75%,to {transform: scale(1);}25% {transform:…

趣学前端 | 类,我想好好继承它的知识点

背景 最近睡前习惯翻会书&#xff0c;重温了《JavaScript权威指南》。这本书&#xff0c;文字小&#xff0c;内容多。两年了&#xff0c;我才翻到第十章。因为书太厚&#xff0c;平时都充当电脑支架。 JavaScript 类 话说当年类、原型、继承&#xff0c;差点给我绕晕。 在J…