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

PackageManager packageManager = getPackageManager();
List<ApplicationInfo> list = packageManager.getInstalledApplications(PackageManager.GET_META_DATA)
复制代码

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

1.创建 布局文件

activity_main.xml

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

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="fill_parent"android:layout_height="fill_parent"android:orientation="vertical" ><ListViewandroid:id="@android:id/list"android:layout_width="fill_parent"android:layout_height="wrap_content" /></LinearLayout>
复制代码

snippet_list_row.xml

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

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="fill_parent"android:layout_height="wrap_content" ><ImageViewandroid:id="@+id/app_icon"android:layout_width="50dp"android:layout_height="50dp"android:padding="3dp"android:scaleType="centerCrop" /><LinearLayoutandroid:layout_width="fill_parent"android:layout_height="fill_parent"android:gravity="center_vertical"android:orientation="vertical"android:paddingLeft="5dp" ><TextViewandroid:id="@+id/app_name"android:layout_width="fill_parent"android:layout_height="wrap_content"android:gravity="center_vertical"android:textStyle="bold" /><TextViewandroid:id="@+id/app_paackage"android:layout_width="fill_parent"android:layout_height="wrap_content"android:gravity="center_vertical" /></LinearLayout></LinearLayout>
复制代码

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<ApplicationInfo> applist = null;private ApplicationAdapter listadaptor = null;@Overridepublic 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();}@Overrideprotected 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<ApplicationInfo> checkForLaunchIntent(List<ApplicationInfo> list) {ArrayList<ApplicationInfo> applist = new ArrayList<ApplicationInfo>();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<Void, Void, Void> {private ProgressDialog progress = null;@Overrideprotected 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;}@Overrideprotected void onCancelled() {super.onCancelled();}@Overrideprotected void onPostExecute(Void result) {setListAdapter(listadaptor);progress.dismiss();super.onPostExecute(result);}@Overrideprotected void onPreExecute() {progress = ProgressDialog.show(AllAppsActivity.this, null,"Loading application info...");super.onPreExecute();}@Overrideprotected 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<ApplicationInfo> {private List<ApplicationInfo> appsList = null;private Context context;private PackageManager packageManager;public ApplicationAdapter(Context context, int textViewResourceId,List<ApplicationInfo> appsList) {super(context, textViewResourceId, appsList);this.context = context;this.appsList = appsList;packageManager = context.getPackageManager();}@Overridepublic int getCount() {return ((null != appsList) ? appsList.size() : 0);}@Overridepublic ApplicationInfo getItem(int position) {return ((null != appsList) ? appsList.get(position) : null);}@Overridepublic long getItemId(int position) {return position;}@Overridepublic 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;}
};
复制代码

如何获得Android手机的软件安装列表相关推荐

  1. 无线智能插座Android手机客户端软件安装

    该无线智能插座的Android手机客户端软件的详细安装过程如下所示(以博主的nova5i手机为例): (1)首先打开Android Studio开发工具中的工程开发项目 (2)利用手机充电数据线,将充 ...

  2. android默认安装位置,修改Android手机的软件默认安装位置

    如无意外,一般来说,android 手机的默认安装位置应该是手机内存,因为考虑到如输入法的软件需要常驻使用. 但对于手机 Room 较小的手机,自然是把如游戏等非关键程序安装在 SD 卡好,留出更多的 ...

  3. 修复 Android 系统问题的 9 款最佳 Android 手机维修软件和应用

    您可能会对新的 Android 手机印象深刻,因为它令人兴奋的性能.然而,随着时间的推移,您可能会发现系统与过去不一样.您可能会遇到屏幕无响应. Android 应用程序崩溃.连接问题.电池耗尽等现象 ...

  4. 修复常见 Android 问题的 9 款顶级 Android 手机维修软件

    许多人发现Android手机或平板电脑上的Android操作系统一开始运行得很好,但随着时间的推移,可能会出现各种Android系统问题.您可能会遇到一些问题,例如系统速度变慢.启动无响应.挂起错误. ...

  5. android_ android apk analyzer(libchecker apk分析器):分析Android手机上已安装的app(库/基础组件分析/开发技术)/从酷安市场下载安装包

    android apk analyzer(libchecker apk分析器):分析Android手机上已安装的app(库/基础组件分析/开发技术-) download app(apk) Releas ...

  6. 手机解锁方法:8个顶级的 Android 手机解锁软件

    一般来说,太简单的密码是不安全的,所以我们设置一个安全的密码,可能会稍微复杂一点.然而,我们可能经常会忘记复杂的密码并锁定我们的 Android 智能手机. 8个顶级的 Android 手机解锁软件 ...

  7. 无线智能插座Android手机客户端软件主控制MainActivity代码实现

    该无线智能插座Android手机客户端软件主控制MainActivity在文件中的位置如下图所示,MainActivity是Android手机客户端软件实现用户注册.登录.智能控制插座等功能的代码实现 ...

  8. 无线智能插座的Android手机客户端软件界面开发

    该无线智能插座的Android手机客户端软件利用Android Studio开发工具进行实战开发,其开发详细的实现过程如下. 首先如下图所示,找到manifests文件下的AndroidManifes ...

  9. 无线智能插座Android手机客户端软件展示

    最后,该无线智能插座的Android手机客户端软件展示图如下图所示:

  10. Android的.apk软件安装到sd卡的方法

    对于Android 2.2开始的软件可以装到到SD上的支持,对于adb命令而言也有了改进,对于Android 2.2固件中的pm命令开支持安装选项参数,这里新增了参数setInstallLocatio ...

最新文章

  1. PHP中阶,PHP进阶
  2. 钻进眼球的致盲寄生虫威胁近亿人,却只是生存竞争的失败者
  3. inline hook __usercall 函数
  4. 我的ACM之路-写于南宁站后
  5. Android - Okhttp拦截器
  6. MaxCompute Studio使用心得系列6——一个工具完成整个Python UDF开发
  7. [机器学习-sklearn]鸢尾花Iris数据集
  8. 疫情之下,精准测试的智能可信模式正在成为中流砥柱
  9. java csv 数组_如何在Java中将JSON数组转换为CSV?
  10. Eclipse Tips(2):代码颜色设置
  11. 看我如何从 icloud.com 中发现存储型 XSS并获$5000奖金
  12. zrender源码分析4--初始化Painter绘图模块2
  13. react WangEditor 编辑器阿里云OSS上传图片
  14. python读取文件格式化方法
  15. flashfxp中文破解版|flashfxp v5.4绿色破解版下载免注册码(强大的fxp/ftp客户端)
  16. 恒压供水程序 三菱plc恒压供水程序,威纶触摸屏程序
  17. 显著性水平 P值 概念解释
  18. CentOS设置SSH Key登录
  19. 大学生职业规划8000字_大一职业规划书8000字
  20. python的self使用

热门文章

  1. [转]laravel 4之视图及Responses
  2. 离散数学蕴含式的问题
  3. ati hd4570 linux amd 64 安装命令,ATI 显卡的驱动在Linux下的安装方法
  4. matlab 连续相同数据库,MATLAB向量:防止来自相同范围的连续值
  5. Android下基于UVC的UsbCam的开发
  6. virt_to_page
  7. pjsip代码分析(1)——modules框架
  8. Linux 设备驱动--- 并发 与 竞态 --- atomic_t --- atomic_dec_and_test --- 原子操作
  9. Linux文件系统(六)---三大缓冲区之 目录缓冲区dcache
  10. focal loss小结