java手机应用安装目录_如何获得Android手机的软件安装列表

article/2025/9/20 4:01:07

Android的PackageManager类用于检索目前安装在设备上的应用软件包的信息。你可以通过调用getpackagemanager()得到PackageManager类的一个实例。对查询和操作安装包和相关的权限提供了方法,在下面这个Android的例子中,我们得到了在Android安装的应用程序列表。

AAffA0nNPuCLAAAAAElFTkSuQmCC

PackageManager packageManager = getPackageManager();

List list = packageManager.getInstalledApplications(PackageManager.GET_META_DATA)

packageManager.getInstalledApplications()返回一个列表都是安装在设备上的应用程序包。如果我们把 flag GET_UNINSTALLED_PACKAGES设定,一个列表中的所有应用,包括那些设置为dont_delete_data(部分已安装的应用程序的数据目录)将返回。

1.创建 布局文件

activity_main.xml

你可以看到附件中的截图,我们将创建一个列表显示所有已安装的应用程序。

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:orientation="vertical" >

android:id="@android:id/list"

android:layout_width="fill_parent"

android:layout_height="wrap_content" />

snippet_list_row.xml

这个布局是由ListView适配器用于表示应用程序的细节。它显示应用程序图标、应用程序名称和应用程序包。

android:layout_width="fill_parent"

android:layout_height="wrap_content" >

android:id="@+id/app_icon"

android:layout_width="50dp"

android:layout_height="50dp"

android:padding="3dp"

android:scaleType="centerCrop" />

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:gravity="center_vertical"

android:orientation="vertical"

android:paddingLeft="5dp" >

android:id="@+id/app_name"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:gravity="center_vertical"

android:textStyle="bold" />

android:id="@+id/app_paackage"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:gravity="center_vertical" />

2.java 类

AllAppsActivity.java

这是用于初始化和列表已安装的应用程序的主要应用程序类。从packagemanage得到应用细节列表是一个耗时的任务,我们将在AsyncTask里面做。同时,类使用自定义适配器“自定义listview applicationadapter”。

package com.javatechig.listapps;

import java.util.ArrayList;

import java.util.List;

import android.app.AlertDialog;

import android.app.ListActivity;

import android.app.ProgressDialog;

import android.content.ActivityNotFoundException;

import android.content.DialogInterface;

import android.content.Intent;

import android.content.pm.ApplicationInfo;

import android.content.pm.PackageManager;

import android.net.Uri;

import android.os.AsyncTask;

import android.os.Bundle;

import android.view.Menu;

import android.view.MenuInflater;

import android.view.MenuItem;

import android.view.View;

import android.widget.ListView;

import android.widget.Toast;

public class AllAppsActivity extends ListActivity {

private PackageManager packageManager = null;

private List applist = null;

private ApplicationAdapter listadaptor = null;

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

packageManager = getPackageManager();

new LoadApplications().execute();

}

public boolean onCreateOptionsMenu(Menu menu) {

MenuInflater inflater = getMenuInflater();

inflater.inflate(R.menu.menu, menu);

return true;

}

public boolean onOptionsItemSelected(MenuItem item) {

boolean result = true;

switch (item.getItemId()) {

case R.id.menu_about: {

displayAboutDialog();

break;

}

default: {

result = super.onOptionsItemSelected(item);

break;

}

}

return result;

}

private void displayAboutDialog() {

final AlertDialog.Builder builder = new AlertDialog.Builder(this);

builder.setTitle(getString(R.string.about_title));

builder.setMessage(getString(R.string.about_desc));

builder.setPositiveButton("Know More", new DialogInterface.OnClickListener() {

public void onClick(DialogInterface dialog, int id) {

Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://stacktips.com"));

startActivity(browserIntent);

dialog.cancel();

}

});

builder.setNegativeButton("No Thanks!", new DialogInterface.OnClickListener() {

public void onClick(DialogInterface dialog, int id) {

dialog.cancel();

}

});

builder.show();

}

@Override

protected void onListItemClick(ListView l, View v, int position, long id) {

super.onListItemClick(l, v, position, id);

ApplicationInfo app = applist.get(position);

try {

Intent intent = packageManager

.getLaunchIntentForPackage(app.packageName);

if (null != intent) {

startActivity(intent);

}

} catch (ActivityNotFoundException e) {

Toast.makeText(AllAppsActivity.this, e.getMessage(),

Toast.LENGTH_LONG).show();

} catch (Exception e) {

Toast.makeText(AllAppsActivity.this, e.getMessage(),

Toast.LENGTH_LONG).show();

}

}

private List checkForLaunchIntent(List list) {

ArrayList applist = new ArrayList();

for (ApplicationInfo info : list) {

try {

if (null != packageManager.getLaunchIntentForPackage(info.packageName)) {

applist.add(info);

}

} catch (Exception e) {

e.printStackTrace();

}

}

return applist;

}

private class LoadApplications extends AsyncTask {

private ProgressDialog progress = null;

@Override

protected Void doInBackground(Void... params) {

applist = checkForLaunchIntent(packageManager.getInstalledApplications(PackageManager.GET_META_DATA));

listadaptor = new ApplicationAdapter(AllAppsActivity.this,

R.layout.snippet_list_row, applist);

return null;

}

@Override

protected void onCancelled() {

super.onCancelled();

}

@Override

protected void onPostExecute(Void result) {

setListAdapter(listadaptor);

progress.dismiss();

super.onPostExecute(result);

}

@Override

protected void onPreExecute() {

progress = ProgressDialog.show(AllAppsActivity.this, null,

"Loading application info...");

super.onPreExecute();

}

@Override

protected void onProgressUpdate(Void... values) {

super.onProgressUpdate(values);

}

}

}

ApplicationAdapter.java

package com.javatechig.listapps;

import java.util.List;

import android.content.Context;

import android.content.pm.ApplicationInfo;

import android.content.pm.PackageManager;

import android.view.LayoutInflater;

import android.view.View;

import android.view.ViewGroup;

import android.widget.ArrayAdapter;

import android.widget.ImageView;

import android.widget.TextView;

public class ApplicationAdapter extends ArrayAdapter {

private List appsList = null;

private Context context;

private PackageManager packageManager;

public ApplicationAdapter(Context context, int textViewResourceId,

List appsList) {

super(context, textViewResourceId, appsList);

this.context = context;

this.appsList = appsList;

packageManager = context.getPackageManager();

}

@Override

public int getCount() {

return ((null != appsList) ? appsList.size() : 0);

}

@Override

public ApplicationInfo getItem(int position) {

return ((null != appsList) ? appsList.get(position) : null);

}

@Override

public long getItemId(int position) {

return position;

}

@Override

public View getView(int position, View convertView, ViewGroup parent) {

View view = convertView;

if (null == view) {

LayoutInflater layoutInflater = (LayoutInflater) context

.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

view = layoutInflater.inflate(R.layout.snippet_list_row, null);

}

ApplicationInfo applicationInfo = appsList.get(position);

if (null != applicationInfo) {

TextView appName = (TextView) view.findViewById(R.id.app_name);

TextView packageName = (TextView) view.findViewById(R.id.app_paackage);

ImageView iconview = (ImageView) view.findViewById(R.id.app_icon);

appName.setText(applicationInfo.loadLabel(packageManager));

packageName.setText(applicationInfo.packageName);

iconview.setImageDrawable(applicationInfo.loadIcon(packageManager));

}

return view;

}

};


http://chatgpt.dhexx.cn/article/0bkC4Jf0.shtml

相关文章

这些信贷数据埋点中不得不知的埋点知识

国庆七天假,就这样飞快结束,似乎感觉还没休息够,再来一个七天都不觉得多多。 经过多年来移动互联网的普及,众多APP已采集到亿级乃至数十亿级别用户在设备端、通话、短信、地址等强变量的数据,伴随着近年来信贷行业高速…

新浪微博开发(五)AppList界面

这是客户端开发部分很重要的一个类,但是在开发之前需要用到有关GridView的知识。 若要临时充充电,请移步:GridView(九宫图)的使用介绍。 下面是AppList类的代码: /* * 用来显示、管理自己的微博账号,包括新浪微博账号…

使用react+redux+react-redux+react-router+axios+scss技术栈从0到1开发一个applist应用

先看效果图 github地址 github仓库 在线访问 初始化项目 #创建项目 create-react-app applist #如果没有安装create-react-app的话,先安装 npm install -g create-react-app 目录结构改造 |--config |--node_modules |--public |--scripts |--src|-----api //…

【无标题】https://e-cloudstore.com/ec/api/applist/index.html#/

这里写自定义目录标题 欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants 创建一个自定义列表如何创建一个…

AppList数据处理

本文参考: 风控数据—手机App数据挖掘实践思路 引言 作为移动互联网时代的主要载体,智能手机逐渐成为人们日常生活中不可或缺的一部分,改变着人们的生活习惯。比如,可以用“饿了么”点外卖,“支付宝”可以用来种树,“抖音”可以用来上厕所......强大的App给我们的生活带来…

Faststone capture注册码

转载整理 很好用的图片编辑软件! 企业版序列号: name:bluman serial/序列号/注册码:VPISCJULXUFGDDXYAUYF FastStone Capture 注册码 序列号: name/用户名:TEAM JiOO key/注册码:CPCWXRVCZW30H…

FastStone Capture(超级强大的截图、屏幕录制软件)

FastStone Capture是一款体积极其小、功能强悍的屏幕捕捉软件,还有强大的图片编辑、视频录制编辑功能,能够完全满足你截屏、处理图片的要求。FastStone Capture (FSCapture) 是经典好用的屏幕截图软件,还具有图像编辑和…

截图工具FastStone Capture

文章目录 1 下载安装2 工具使用介绍2.1 截图2.1.1 截图2.1.2 滚动截图 2.2 录屏 FastStone Capture也常被简称为FS Capture,是一款小巧但强悍的软件,集截图、录屏、标尺、取色器等工具于一体。 1 下载安装 官方下载: https://faststone-capt…

FastStone Capture—视频绘制

博客概要 已经写了好些篇博文来介绍FSP了,广告费付一下? 在博主的某篇博文中,粗略介绍了FSP的“屏幕录像”功能,其中“录像编辑”一栏其实没有过多赘述,那么本篇就稍微,真的是稍微,再多介绍一些…

巨好用的截图录屏工具-FastStone Capture

哈喽,大家好呀。想问问小伙伴们平时若是不打开微信、QQ的时候一般是用什么工具截图呢,是微软自带的截图工具,还是其它的呢?今天给大家测试一款非常好用的截图录屏一体轻量级工具哦,也是小编用了好多年的一款工具了&…

FastStoneCapture 截图软件的使用

1:下载解压好 下载后,不要放在桌面,怕把这个截图软件删除掉,把这个FastStoneCapture_9.3_汉化版放在你的,D盘E盘都可以。 放在桌面以后容易当垃圾清理掉!! 下载后,鼠标右键解压成文件夹,文件里面双击打开这个软件就可以用 把软件图标,从你的电脑拖放到桌面就可使用了…

FastStone Capture(FSCapture) 注册码

FSCapture是一款抓屏工具,附带的其他两个小功能:取色器和屏幕放大镜。对抓取的图像提供缩放、旋转、减切、颜色调整等功能。只要点点鼠标就能随心抓取屏幕上的任何东西,拖放支持可以直接从系统、浏览器或其他程序中导入图片。 破解方法&#…

FastStone Capture—截图处理

博客概要 上一篇博文中介绍了FSC的七大截图功能,FSC除了能方便的截图外,还能在很大程度上对所截获的图片进行处理,本博文简单分享几个FSC的“截图处理”功能~ 文章目录 博客概要FastStone Capture-使用案例_总目录截图处理1.绘制2.模糊3.调整…

FastStone Capture 9.3 汉化绿色便携版 - 极品屏幕截图工具

FastStone Capture http://blog.sina.com.cn/flyonzone 是一款极好用的图像浏览、编辑和截屏工具,支持 BMP、JPG、JPEG、GIF、PNG、TIFF、WMF、ICO 和 TGA 在内的主流图片格式,其独有的光滑和毛刺处理技术让图片更加清晰,提供缩放、旋转、剪…

FastStone Capture(定时自动截图)

FastStone Capture(定时自动截图) 点击设置的自动屏幕捕捉。 然后设置捕捉的对象。 选项里记得去掉右下角的时间戳选项。(默认是有的) 然后自行设置间隔时间。 设置输出的文件夹(图片保存的文件夹)

FastStone Capture—屏幕录像

博客概要 FSC还有一个简易的“视频录制”功能,即“屏幕录像”,可以满足一般精度的录制需求,本博文分享利用FSC录制的简要过程,以及对视频的简易处理~ 文章目录 博客概要FastStone Capture-使用案例_总目录屏幕录像1.打开-选择区域…

faststone capture没声音

右键桌面-->个性化 主题-->声音 录音-->右键“立体声混音”,单击启用 并且 设置为默认设备。 以上就是faststone capture录制视频没声音的解决方法.

FastStone Capture监视器上拍摄和拍摄

FastStone Capture监视器上拍摄和拍摄 FastStone Capture是一个功能强大且简单的程序,用于在监视器上拍摄和拍摄。该程序识别并拍摄您在页面上看到的几乎所有内容。 你可以把我当作屏幕截图。您可以轻松复制页面的稳定区域。对于复杂的情况,您甚至可以自…

FastStone Capture 截图工具 YYDS

FastStone Capture 截图工具 YYDS FastStone Capture中文版免费下载 https://www.faststonecapture.cn/download FastStone Capture注册安装教程 https://www.faststonecapture.cn/article/1001.html

如何使用FastStone Capture无缝拼接两张图片?

1.打开FastStone Capture,CtrlE显示编辑器,将需要拼接的两张图片拖进去 2.点击合并 3.选择垂直方向或者水平方向合并 4.取消勾选 显示序列号、文件名,阴影,调整大小 5.分隔,调整间距为0像素 6.预览效果,没…