android自定义桌面应用

android自定义桌面应用

这篇文章主要讲下自定义桌面应用.

效果主要是调用packageManager来获取当前所有的程序,并在自定义桌面程序中展示,并支持跳转.

主要的代码如下:

1.manifest声明

   <activity android:name=".MainActivity"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.HOME" /><category android:name="android.intent.category.DEFAULT" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity>

2: 创建adapter

package com.test.luanchertest;import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;import java.util.List;/*** @Author: zh* @Time: 23-11-27.* @Email:* @Describe:*/
public class LauncherAdapter extends BaseAdapter {private List<ResolveInfo> mApps;private PackageManager mPackageManager;private Context context;public LauncherAdapter(Context context) {this.context = context;mPackageManager = context.getPackageManager();Intent mainIntent = new Intent(Intent.ACTION_MAIN, null);mainIntent.addCategory(Intent.CATEGORY_LAUNCHER);mApps = mPackageManager.queryIntentActivities(mainIntent, 0);}@Overridepublic int getCount() {return mApps.size();}@Overridepublic Object getItem(int i) {return mApps.get(i);}@Overridepublic long getItemId(int i) {return i;}@Overridepublic View getView(int i, View view, ViewGroup viewGroup) {if (view == null) {view = LayoutInflater.from(context).inflate(R.layout.item_launcher, viewGroup, false);}ResolveInfo info = mApps.get(i);ImageView icon = (ImageView) view.findViewById(R.id.item_icon);TextView label = (TextView) view.findViewById(R.id.item_label);icon.setImageDrawable(info.loadIcon(mPackageManager));label.setText(info.loadLabel(mPackageManager));String packageName = info.activityInfo.packageName;Log.e("xxxxxxx", "getView: "+packageName );Intent launchIntent = mPackageManager.getLaunchIntentForPackage(packageName);icon.setOnClickListener(v -> context.startActivity(launchIntent));label.setOnClickListener(v -> context.startActivity(launchIntent));return view;}
}

3: 创建item布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="vertical"xmlns:app="http://schemas.android.com/apk/res-auto"><ImageViewandroid:id="@+id/item_icon"android:layout_width="48dp"android:layout_height="48dp"android:scaleType="centerCrop"android:layout_gravity="center_horizontal"android:layout_margin="10dp"/><TextViewandroid:id="@+id/item_label"android:layout_width="wrap_content"android:layout_height="wrap_content"android:textSize="12sp"android:textColor="#000000"android:text="xxxx"android:layout_gravity="center_horizontal"/>
</LinearLayout>

4: mainAcitivty处理

public class MainActivity extends AppCompatActivity {private GridView gridView;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);gridView =findViewById(R.id.launcher_grid);gridView.setAdapter(new LauncherAdapter(this));}
}

主布局:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity"><GridViewandroid:layout_width="match_parent"android:layout_height="match_parent"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toTopOf="parent"android:id="@+id/launcher_grid"android:numColumns="3"/>
</androidx.constraintlayout.widget.ConstraintLayout>

运行效果如下:

在这里插入图片描述

在设置中可以查找默认桌面应用:

在这里插入图片描述

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

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

相关文章

【uniapp】微信运行报错TypeError_ Cannot read property ‘FormData‘ of undefined

文章目录 一、报错详情&#xff1a;二、解决&#xff1a; 一、报错详情&#xff1a; 二、解决&#xff1a; npm install axios0.27.2 #或者 npm install axios1.3.4

<JavaEE> Java中线程有多少种状态(State)?状态之间的关系有什么关系?

目录 一、系统内核中的线程状态 二、Java中的线程状态 一、系统内核中的线程状态 状态说明就绪状态线程已经准备就绪&#xff0c;随时可以接受CPU的调度。阻塞状态线程处于阻塞等待&#xff0c;暂时无法在CPU中执行。 二、Java中的线程状态 相比于系统内核&#xff0c;Java…

SELinux零知识学习三十六、SELinux策略语言之角色和用户(7)

接前一篇文章:SELinux零知识学习三十五、SELinux策略语言之角色和用户(6) 三、SELinux策略语言之角色和用户 SELinux提供了一种依赖于类型强制(类型增强,TE)的基于角色的访问控制(Role-Based Access Control),角色用于组域类型和限制域类型与用户之间的关系,SELinux…

Doris-数据导入 (二十三)

导入&#xff08;Load&#xff09;功能就是将用户的原始数据导入到 Doris 中。导入成功后&#xff0c;用户即可通过Mysql 客户端查询数据。为适配不同的数据导入需求&#xff0c;Doris 系统提供了 6 种不同的导入方式。每种导入方式支持不同的数据源&#xff0c;存在不同的使用…

内测分发平台是否支持应用的微服务化部署

内测分发平台的微服务化部署支持是现代应用开发和部署的一个重要特性。首先我们得知道什么是微服务化部署都有哪些关键功能&#xff0c;如何实施微服务化的部署。下文以我自己理解总结了几点。 图片来源:news.gulufenfa.com 微服务是一种基于独立运行的小型服务来构建应用程序…

ILSVRC2012数据集处理

ILSVRC2012数据集处理 解压图像处理标签和图像 解压图像 先解压 tar -xvf ILSVRC2012_img_train.tar 解压之后其实还是1000个tar压缩包&#xff08;对应1000个类别&#xff09;&#xff0c;需要再次解压&#xff0c;解压脚本unzip.sh如下&#xff08;PS&#xff1a;可能需要自…

智能优化算法应用:基于教与学算法无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于教与学算法无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于教与学算法无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.教与学算法4.实验参数设定5.算法结果6.参考文献7.…

8.vue3项目(八):平台属性管理页面的增删改查

目录​​​​​​​ 一、平台属性管理静态搭建 二、封装接口以及入参出参 三、页面刚加载一级分类的收集与展示</

深度学习【二】

1.运行时错误 1.1 ModuleNotFoundError: No module named ‘torch_scatter’ 参考 https://blog.csdn.net/weixin_42421914/article/details/132875571 pip install --no-index torch-scatter -f https://pytorch-geometric.com/whl/torch-1.13.1%2Bcpu.html

Day49:647. 回文子串、516.最长回文子序列

文章目录 647. 回文子串思路代码实现 516.最长回文子序列思路代码实现 647. 回文子串 题目链接 思路 确定dp数组&#xff08;dp table&#xff09;以及下标的含义 布尔类型的dp[i][j]&#xff1a;表示区间范围[i,j] &#xff08;注意是左闭右闭&#xff09;的子串是否是回文…

亚马逊策略:通过影响者营销改造您的亚马逊商店

亚马逊卖家面临着从人群中脱颖而出的持续挑战 - 如果您是那些寻求变革性方法来接触目标受众、建立信任并将您的销售推向新高度的卖家之一&#xff0c;那么影响力营销就是您的答案。 您可能遇到过令人难以置信的成功故事&#xff0c;产品一夜之间流行起来&#xff0c;仅仅是因为…

java数据转换为stream的方法

要将数据转换为Java中的Stream&#xff0c;有几种常见的方法&#xff0c;具体取决于数据类型和数据来源。 集合&#xff08;Collection&#xff09;&#xff1a;集合对象&#xff0c;比如List、Set或者数组&#xff0c;可以使用stream()方法将其转换为Stream。 List<Strin…

集群 CPU 利用率均值达 45% ,揭秘小红书规模化混部技术实践

根据 Gartner 预测数据显示&#xff1a;2024 年全球 IT 支出预计将达到 5.1 万亿美元&#xff0c;比 2023 年增长 8 %。然而&#xff0c;该机构的另一项调查数据显示&#xff1a;全球数据中心服务器平均 CPU 利用率普遍低于 20%&#xff0c;存在巨大的资源浪费。据测算&#xf…

“全球金牌课程”1 月 13-14 日 · CSM 认证在线面授周末班【模块化教学】CST 导师亲授

课堂互动练习 CSM 认证在线培训&#xff08;周末班&#xff09; 2024 年 1 月 13-14 日 Zoom 在线面授&#xff0c;全国招生 讲师: Jim Wang 王军 10 年以上 CSM/CSPO 认证课程教学交付经验&#xff0c; 5 年以上 A-CSM/CSP-SM 认证课程教学交付经验&#xff0c; 国际 Scr…

AI 绘画 | Stable Diffusion 人物 换背景|换服装

前言 想要给固定人物换背景或者换服装,需要用到一个Stable Diffusion扩展插件,就是sd-webui-segment-anything。 sd-webui-segment-anything 不仅可以做到抠图的效果,也能实现之多蒙版的效果。什么是蒙版 图片蒙版是一种用于调节图像修改程度以及进行局部调整的工具。它通常…

面试必问的排序算法

欢迎大家到我的博客浏览。排序算法 | YinKais Blog 介绍 在面试中被问到排序算法&#xff0c;发现不能很好的描述出来&#xff0c;于是写一篇文章总结一下。常见的排序算法有 冒泡排序、插入排序、快速排序、归并排序、堆排序等。下面一一介绍。 1、冒泡排序 O(n^2) 算法思想…

村村通工程(Prim算法)/最小生成树Prim算法【数据结构】

村村通工程&#xff08;Prim算法&#xff09; 题目描述 "村村通"是国家一个系统工程&#xff0c;其包涵有&#xff1a;公路、电力、生活和饮用水、电话网、有线电视网、互联网等等。 村村通公路工程&#xff0c;是国家为构建和谐社会&#xff0c;支持新农村建设的…

Linux sed命令

目录 一. 去除单个指定文本的换行符二. 去除多个指定文本的换行符三. 抽取出指定数据3.1 分别抽取SPLREQUEST和SPLEND的数据3.2 通过join命令将文件合并3.3 抽取出指定的数据3.4 去除换行符&#xff0c;整合数据为一行 一. 去除单个指定文本的换行符 &#x1f449; info.txt …

CSS新手入门笔记整理:CSS字体样式

字体类型&#xff1a;font-family 语法 font-family&#xff1a;字体1,字体2,...,字体n; font-family可以指定多种字体。使用多个字体时&#xff0c;将按从左到右的顺序排列&#xff0c;并且以英文逗号&#xff08;,&#xff09;隔开。如果我们不定义font-family&#xff0c…

Apache Airflow (十四) :Airflow分布式集群搭建及测试

&#x1f3e1; 个人主页&#xff1a;IT贫道_大数据OLAP体系技术栈,Apache Doris,Clickhouse 技术-CSDN博客 &#x1f6a9; 私聊博主&#xff1a;加入大数据技术讨论群聊&#xff0c;获取更多大数据资料。 &#x1f514; 博主个人B栈地址&#xff1a;豹哥教你大数据的个人空间-豹…