Launcher最基本的是让所有的应用程序和入口图标的列表。有两种方法来获得,一般:

PackageInfo

ResolveInfo

执行获取全部APP的Launcher而且同意进行点击事件,进入到应用

以下通过这两种方法获取到全部应用的列表:

建立基本数据:

PakageMod.java

public class PakageMod {

	public String pakageName;
public String appName;
public Drawable icon; public PakageMod() {
super();
} public PakageMod(String pakageName, String appName, Drawable icon) {
super();
this.pakageName = pakageName;
this.appName = appName;
this.icon = icon;
}
}

建立适配器:

public class DemoGridAdapter extends BaseAdapter {

	private LayoutInflater inflater;
private List<PakageMod> datas; public DemoGridAdapter(Context context, List<PakageMod> datas) {
super();
inflater = LayoutInflater.from(context);
this.datas = datas;
} @Override
public int getCount() {
return datas.size();
} @Override
public Object getItem(int position) {
return null;
} @Override
public long getItemId(int position) {
return position;
} @Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
// 使用View的对象itemView与R.layout.item关联
convertView = inflater.inflate(R.layout.apps, null);
holder = new ViewHolder();
holder.icon = (ImageView) convertView.findViewById(R.id.apps_image);
holder.label = (TextView) convertView
.findViewById(R.id.apps_textview);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
} holder.icon.setImageDrawable(datas.get(position).icon);
holder.label.setText(datas.get(position).appName); return convertView; } class ViewHolder {
private ImageView icon;
private TextView label;
}
}

建立适配器的视图:

<?

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="fill_parent"
android:gravity="center"
android:orientation="vertical" > <ImageView
android:id="@+id/apps_image"
android:layout_width="48dip"
android:layout_height="48dip"
android:icon="@drawable/ic_launcher" /> <TextView
android:id="@+id/apps_textview"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:maxEms="5"
android:maxLines="1"
android:text="good" /> </LinearLayout>

以下在Activity中获取到列表并显示到GridView中,并点击进入应用;

使用PackageInfo

public class PackageInfoDemo extends Activity {

	private GridView gridview;
private PackageManager pManager;
private List<PakageMod> datas;
private String tag = "MainActivity"; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.setContentView(R.layout.activity_main);
// 取得gridview
gridview = (GridView) findViewById(R.id.gridview);
// 获取图片、应用名、包名
pManager = PackageInfoDemo.this.getPackageManager();
List<PackageInfo> appList = getAllApps(PackageInfoDemo.this);
datas = new ArrayList<PakageMod>();
for (int i = 0; i < appList.size(); i++) {
PackageInfo pinfo = appList.get(i);
PakageMod shareItem = new PakageMod();
// 设置图片
shareItem.icon = pManager.getApplicationIcon(pinfo.applicationInfo);
// 设置应用程序名字
shareItem.appName = pManager.getApplicationLabel(
pinfo.applicationInfo).toString();
// 设置应用程序的包名
shareItem.pakageName = pinfo.applicationInfo.packageName; datas.add(shareItem); }
gridview.setAdapter(new baseAdapter(this, datas)); // 点击应用图标时,做出响应
gridview.setOnItemClickListener(new ClickListener());
} public static List<PackageInfo> getAllApps(Context context) { List<PackageInfo> apps = new ArrayList<PackageInfo>();
PackageManager pManager = context.getPackageManager();
// 获取手机内全部应用
List<PackageInfo> packlist = pManager.getInstalledPackages(0);
for (int i = 0; i < packlist.size(); i++) {
PackageInfo pak = (PackageInfo) packlist.get(i);
// if()里的值假设<=0则为自己装的程序。否则为系统project自带
if ((pak.applicationInfo.flags & pak.applicationInfo.FLAG_SYSTEM) <= 0) {
// 加入自己已经安装的应用程序
// apps.add(pak);
}
apps.add(pak);
}
return apps;
} private class ClickListener implements OnItemClickListener { @Override
public void onItemClick(AdapterView<? > arg0, View arg1, int position,
long arg3) {
Intent intent = new Intent();
intent = PackageInfoDemo.this.getPackageManager()
.getLaunchIntentForPackage(datas.get(position).pakageName);
startActivity(intent);
}
}
}

使用ResolveInfo

public class ResolveInfoDemo extends Activity {
private GridView gridview;
private PackageManager pManager;
private List<PakageMod> datas;
private String tag = "ResolveInfoDemo"; @Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
this.setContentView(R.layout.activity_main);
// 取得gridview
gridview = (GridView) findViewById(R.id.gridview); // 获取图片、应用名、包名
pManager = this.getPackageManager(); datas = new GetAllApps(this).getDatas();
gridview.setAdapter(new DemoGridAdapter(this, datas));
gridview.setOnItemClickListener(new ClickListener());
} // 当用户点击应用程序图标时,将对这个类做出响应
private class ClickListener implements OnItemClickListener { @Override
public void onItemClick(AdapterView<?> adapterView, View view, int arg2,
long arg3) {
Intent intent = new Intent();
intent = getPackageManager().getLaunchIntentForPackage(
datas.get(arg2).pakageName);
startActivity(intent);
} }
}

GetAllApps.java

public class GetAllApps {

	private Context mContext;
private PackageManager packageManager;
private int mIconDpi;
private String tag = "GetAllApps";
private List<PakageMod> datas = new ArrayList<PakageMod>(); public GetAllApps(Context mContext){
this.mContext = mContext;
ActivityManager activityManager =
(ActivityManager) mContext.getSystemService(Context.ACTIVITY_SERVICE);
packageManager = mContext.getPackageManager();
mIconDpi = activityManager.getLauncherLargeIconDensity();
} public void loadAllAppsByBatch() {
List<ResolveInfo> apps = null;
Intent mainIntent = new Intent(Intent.ACTION_MAIN, null);
mainIntent.addCategory(Intent.CATEGORY_LAUNCHER);
apps = packageManager.queryIntentActivities(mainIntent, 0);
for (int i = 0; i < apps.size(); i++) {
String packageName = apps.get(i).activityInfo.applicationInfo.packageName;
String title = apps.get(i).loadLabel(packageManager).toString();
Drawable icon = null;
if(title == null){
title = apps.get(i).activityInfo.name;
}
ActivityInfo info = apps.get(i).activityInfo;
icon = getFullResIcon(info);
datas.add(new PakageMod(packageName,title,icon));
}
} public Drawable getFullResIcon(ActivityInfo info) {
Resources resources;
try {
resources = packageManager.getResourcesForApplication(
info.applicationInfo);
} catch (PackageManager.NameNotFoundException e) {
resources = null;
}
if (resources != null) {
int iconId = info.getIconResource();
if (iconId != 0) {
return getFullResIcon(resources, iconId);
}
}
return getFullResDefaultActivityIcon();
} public Drawable getFullResDefaultActivityIcon() {
return getFullResIcon(Resources.getSystem(),
android.R.mipmap.sym_def_app_icon);
} public Drawable getFullResIcon(Resources resources, int iconId) {
Drawable d;
try {
// requires API level 15 (current min is 14):
d = resources.getDrawableForDensity(iconId, mIconDpi);
} catch (Resources.NotFoundException e) {
d = null;
} return (d != null) ? d : getFullResDefaultActivityIcon();
} public List<PakageMod> getDatas() {
loadAllAppsByBatch();
return datas;
}
}

这里getDrawableForDensity须要是15版本号以上的SDK支持。全部低版本号的Launcher不能够使用;

本博文使用的两种方法都不须要配置不论什么权限。

Android4.2的Launcher中使用ResolveInfo进行获取所用的应用列表,这里的ResolveInfo的Demo也是从Launcher源代码中抄出来的;

也许还有第3种方法.......待续;

本文来自于CSDN博客,转载请联系作者;

注明出处http://blog.csdn.net/dreamintheworld/article/details/39718581

版权声明:本文博客原创文章,博客,未经同意,不得转载。

安德鲁斯Launcher得到的装在手机的应用程序列表的更多相关文章

  1. 安卓Launcher之获取手机安装的应用列表,安卓launcher

    Launcher中最主要的就是获取所有应用列表的入口以及图标,一般获取的方法有两种: PackageInfo ResolveInfo 运行获取所有APP的Launcher并且允许进行点击事件,进入到应 ...

  2. 手机测试Android程序

    手机测试Android程序   上传者:sanpi329     我也要“分享赚钱” 2014/7/9 关注(23) 评论(0)   声明:此内容仅代表网友个人经验或观点,不代表本网站立场和观点.   ...

  3. 使用Genymotion模拟器或者手机运行ionic4程序

    1.使用命令行 #添加android, 如果是ios ,设置ioscordova platform add android #编译成apkionic build #开启cordova run andr ...

  4. 从”茄子快传”看应用程序怎样获取手机已安装程序的apk文件

    "茄子快传"是联想开发的一款近距离文件共享软件.它通过wifi-direct(速度飞快,不须要联网)或者普通的网络(速度慢)在不同手机间传递文件. 不知为何.它就火了起来,火的也飞 ...

  5. firemonkey 手机屏幕自适应程序问题

    我是新手.在我才学了2个星期的时候,那个白痴老板说什么手机屏幕自适应程序,我当时不能理解呀,觉得用Delphi的布局设计不就行了吗.结果他说:我就是想让控件内容什么的放在小屏幕手机上也不出来.我就说, ...

  6. unity手机游戏应用程序调试控制台Lunar Mobile Console - PRO 1.5.5

    unity手机游戏应用程序调试控制台Lunar Mobile Console - PRO 1.5.5 High-performance Unity iOS/Android console built ...

  7. Launcher知识的demo,手机管家小伙家与悬浮窗

    Launcher知识的demo.主要仿的手机管家小伙家与悬浮窗的效果.东西比較简单.直接贴代码 主要用到了windowManager 中的更新updateViewLayout(view,params) ...

  8. 【h5+c3】web前端实战项目、快装webapp手机案例源码

    快装WebApp项目(Web移动端开发案例)webapp移动端项目源码.html5+css3实战案例分享.微信端H5实例开发 简介快装WebApp是一个面向移动端的快速装修app,此项目为手机端:使用 ...

  9. Android 代码实现应用强制装到手机内存

    在Froyo(android 2.2,API Level:8)中引入了android:installLocation.通过设置该属性可以使得开发者以及用户决定程序的安装位置. android:inst ...

随机推荐

  1. VC和MATLAB混合开发经验总结

    作者:朱金灿 来源:http://blog.csdn.net/clever101 前期准备: 1.请确认机器中已经安装Matlab主程序或(MCR)MATLAB Compiler Runtime(具体 ...

  2. 【u023】最长上升子序列(sequence)

    Time Limit: 1 second Memory Limit: 128 MB [问题描述] 非常经典的问题,拿来给大家练手了. 序列 { 1,2,...,n } 的一个子序列是指序列 { i1, ...

  3. ViewChild与ContentChild的联系和区别

    原文 https://www.jianshu.com/p/5ab619e576ea 大纲 1.认识ViewChild 2.认识ContentChild 3.ViewChild与ContentChild ...

  4. 【26.34%】【codeforces 722A】Broken Clock

    time limit per test1 second memory limit per test256 megabytes inputstandard input outputstandard ou ...

  5. AHB接口转APB

    AHB接口转APB 情景 有一个以AHB接口时序设计的IP,现在需将其移至APB总线上,即将使用APB接口时序驱动该IP. 基本思路 将APB的接口信号映射到AHB的接口信号 要点 APB挂接在AHB ...

  6. JQuery中Ajax详细参数使用案例

    JQuery中Ajax详细参数使用案例 参考文档:http://www.jb51.net/shouce/jquery1.82/ 参考文档:http://jquery.cuishifeng.cn/jQu ...

  7. 【codeforces 755B】PolandBall and Game

    time limit per test1 second memory limit per test256 megabytes inputstandard input outputstandard ou ...

  8. 选择性编译代码:如 #ifdef __IPHONE_7_0

    选择性编译代码: 选择性编译代码和选择性运行代码是不一样的,区别在于: 1.选择性编译代码是在硬件或者系统不支持的情况下不会对该段代码进行编译,也就不会由于不兼容的问题导致报错 #import < ...

  9. [Erlang 0057] Erlang 排错利器: Erlang Crash Dump Viewer

    http://www.cnblogs.com/me-sa/archive/2012/04/28/2475556.html Erlang Crash Dump Viewer真的是排错的天兵神器,还记得我 ...

  10. WPF入门(三)->几何图形之不规则图形(PathGeometry)

    原文:WPF入门(三)->几何图形之不规则图形(PathGeometry) 前面我们给大家介绍了LineGeometry,EllipseGeometry,CombinedGeometry等一些规 ...