文档章节

Android获取手机应用程序包的信息

今日竹石
 今日竹石
发布于 2014/04/23 17:50
字数 872
阅读 38
收藏 0

     今天写了一个获取手机程序相关信息的demo,以下是demo的运行结果。

     这是项目的结构。

下面是项目的具体代码:

1.MainActivity

package com.example.adapterlearn.view;


import java.util.ArrayList;

import java.util.List;


import android.app.Activity;

import android.content.Context;

import android.content.pm.PackageInfo;

import android.content.pm.PackageManager;

import android.os.Bundle;

import android.view.Window;

import android.widget.ListView;


import com.example.adapterlearn.R;

import com.example.adapterlearn.model.MyPackageInfo;

import com.example.adapterlearn.view.controls.MyAdapter;


/**

 * 显示手机应用程序包的相关信息

 * 

 * @作者: 刘倩</br>

 * @时间: 2014年4月23日 下午5:36:49</br>

 * @描述: 主要显示应用程序包的相关信息</br>

 */

public class MainActivity extends Activity

{

/** 声明ListView */

private ListView listView;

/** 包的数据集合 */

private List<MyPackageInfo> piList;

/** 上下文 */

private Context context;


@Override

protected void onCreate(Bundle savedInstanceState)

{

super.onCreate(savedInstanceState);

// 设置为无标题状态

requestWindowFeature(Window.FEATURE_NO_TITLE);

initView();

}


/**

* 初始化视图

*/

private void initView()

{

context = this;

setContentView(R.layout.activity_main);

listView = (ListView) findViewById(R.id.acitvity_main_listview);

piList = getPhonePackageInfo();

listView.setAdapter(new MyAdapter(context, piList));

}


/**

* 得到包的详细信息

* @return 返回包的详细信息

*/

private List<MyPackageInfo> getPhonePackageInfo()

{

List<MyPackageInfo> myList = new ArrayList<MyPackageInfo>();

PackageManager packageManager = context.getPackageManager();

List<PackageInfo> appList = getAllPackageInfoFromThePhone();

for (int i = 0; i < appList.size(); i++)

{

PackageInfo pinfo = appList.get(i);

MyPackageInfo myPackageInfo = new MyPackageInfo();

// 设置icon

myPackageInfo.setPackageIcon(packageManager

.getApplicationIcon(pinfo.applicationInfo));

// 设置应用名称

myPackageInfo.setPackageLabel(packageManager.getApplicationLabel(

pinfo.applicationInfo).toString());

// 设置包名称

myPackageInfo.setPackageName(pinfo.applicationInfo.packageName);

myList.add(myPackageInfo);

}

return myList;

}


/**

* 得到所有的包信息

* @return 返回手机中包的信息

*/

@SuppressWarnings("static-access")

private List<PackageInfo> getAllPackageInfoFromThePhone()

{

List<PackageInfo> apkList = new ArrayList<PackageInfo>();

PackageManager packageManager = context.getPackageManager();

List<PackageInfo> list = packageManager.getInstalledPackages(0);

for (int i = 0; i < list.size(); i++)

{

PackageInfo pi = list.get(i);

if ((pi.applicationInfo.flags & pi.applicationInfo.FLAG_SYSTEM) <= 0)

{

apkList.add(pi);

}

}

return apkList;

}


}

2.MyAdapter

package com.example.adapterlearn.view.controls;


import java.util.List;

import android.annotation.SuppressLint;

import android.content.Context;

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 com.example.adapterlearn.R;

import com.example.adapterlearn.model.MyPackageInfo;


/**

 * 显示应用程序的适配器

 * 

 * @作者: 刘倩</br>

 * @时间: 2014年4月23日 下午5:34:34</br>

 * @描述: 该适配器主要显示应用程序的icon,应用名和包名</br>

 */

public class MyAdapter extends BaseAdapter

{

/** 上下文 */

Context context;

/** 包信息 */

List<MyPackageInfo> piList;

/** 填充器 */

LayoutInflater mInflater;


public MyAdapter(Context context, List<MyPackageInfo> piList)

{

this.context = context;

this.piList = piList;

this.mInflater = LayoutInflater.from(context);

}


@Override

public int getCount()

{

return piList.size();

}


@Override

public Object getItem(int position)

{

return piList.get(position);

}


@Override

public long getItemId(int position)

{

return position;

}


@SuppressLint("NewApi")

@Override

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

{

ViewHolder viewHolder;

if (convertView == null)

{

convertView = mInflater.inflate(R.layout.activity_main_adapter,

null);

viewHolder = new ViewHolder();

viewHolder.ivShowIcon = (ImageView) convertView

.findViewById(R.id.activity_main_adapter_iv_icon);

viewHolder.tvShowLabel = (TextView) convertView

.findViewById(R.id.activity_main_adapter_tv_label);

viewHolder.tvShowPackageName = (TextView) convertView

.findViewById(R.id.activity_main_adapter_tv_packagename);

convertView.setTag(viewHolder);

} else

{

viewHolder = (ViewHolder) convertView.getTag();

}

viewHolder.ivShowIcon.setBackground(piList.get(position)

.getPackageIcon());

viewHolder.tvShowLabel.setText(piList.get(position).getPackageLabel());

viewHolder.tvShowPackageName.setText(piList.get(position)

.getPackageName());

return convertView;

}


/**

* 存放控件的类

* @作者: 刘倩</br>

* @时间: 2014年4月23日 下午5:34:04</br>

* @描述: 此类用于存放控件,缓存用</br>

*/

class ViewHolder

{

public ImageView ivShowIcon;

public TextView tvShowLabel;

public TextView tvShowPackageName;

}

}

3.MyPackageInfo

package com.example.adapterlearn.model;


import android.graphics.drawable.Drawable;


/**

 * 自定义的程序包的信息类

 * 

 * @作者: 刘倩</br>

 * @时间: 2014年4月23日 下午5:35:43</br>

 * @描述: 这里只定义了程序包的icon,应用名称和包名</br>

 */

public class MyPackageInfo

{

/** 应用程序的包名 */

private String packageName = "";

/** 应用程序的icon */

private Drawable packageIcon;

/** 应用程序的标签 */

private String packageLabel = "";


public String getPackageName()

{

return packageName;

}


public void setPackageName(String packageName)

{

this.packageName = packageName;

}


public Drawable getPackageIcon()

{

return packageIcon;

}


public void setPackageIcon(Drawable drawable)

{

this.packageIcon = drawable;

}


public String getPackageLabel()

{

return packageLabel;

}


public void setPackageLabel(String packageLabel)

{

this.packageLabel = packageLabel;

}


}

4.activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

    xmlns:tools="http://schemas.android.com/tools"

    android:layout_width="match_parent"

    android:layout_height="match_parent"

    android:paddingBottom="@dimen/activity_vertical_margin"

    android:paddingLeft="@dimen/activity_horizontal_margin"

    android:paddingRight="@dimen/activity_horizontal_margin"

    android:paddingTop="@dimen/activity_vertical_margin"

    tools:context=".MainActivity" >


    <ListView

        android:id="@+id/acitvity_main_listview"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content" />


</RelativeLayout>

5.activity_main_adapter.xml

<?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="match_parent"

    android:orientation="horizontal" >


    <ImageView

        android:id="@+id/activity_main_adapter_iv_icon"

        android:layout_width="50dip"

        android:layout_height="50dip"

        android:layout_marginBottom="5dip"

        android:layout_marginTop="5dip"

        android:contentDescription="@null" />


    <LinearLayout

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:layout_marginBottom="5dip"

        android:layout_marginLeft="10dip"

        android:layout_marginTop="5dip"

        android:orientation="vertical" >


        <TextView

            android:id="@+id/activity_main_adapter_tv_label"

            android:layout_width="wrap_content"

            android:layout_height="wrap_content" />


        <TextView

            android:id="@+id/activity_main_adapter_tv_packagename"

            android:layout_width="wrap_content"

            android:layout_height="wrap_content" />

    </LinearLayout>


</LinearLayout>

      以上是全部代码,如果想下载源码,请进入:http://download.csdn.net/detail/u010820846/7240785下载




© 著作权归作者所有

共有 人打赏支持
今日竹石
粉丝 41
博文 227
码字总数 181312
作品 0
朝阳
程序员
如何通过命令行查看Android手机的Activtiy堆栈信息和手机分辨率

查看 activity 栈的状态: adb shell dumpsys activity Android has an interesting command called dumpsys to dump some system information. Even described on adb manual I think that ......

beijing_zbs
2015/02/27
0
0
一个应用程序和另一个应用程序apk文件信息

应用场景:对于我们自己开发的两个应用程序,一个应用程序的包名为 aa.bb.cc,软件名叫a,它的入口Activity为 aaActivity(入口activity就是在AndroidManifest.xml中标签——<action android...

lxp198837
2012/06/27
0
0
Android消息推送完美方案

推送功能在手机应用开发中越来越重要,已经成为手机开发的必须。在Android应用开发中,由于众所周知的原因,Android消息推送我们不得不大费周折。本文就是用来和大家共同探讨一种Android消息...

Yujan
2014/04/10
0
0
Android AndroidManifest 清单文件以及权限详解

每个Android应用都需要一个名为AndroidManifest.xml的程序清单文件,这个清单文件名是固定的并且放在每个Android应用的根目录下。它定义了该应用对于Android系统来说一些非常重要的信息。And...

程序袁_绪龙
2015/01/13
0
0
Android系统adb_shell命令大全

adb介绍 SDK的Tools文件夹下包含着Android模拟器操作的重要命令adb,adb的全称为(Android Debug Bridge就是调试桥的作用。通过adb我们可以在Eclipse中方面通过DDMS来调试Android程序。借助这...

xiahuawuyu
2012/10/06
0
0

没有更多内容

加载失败,请刷新页面

加载更多

20180920 rzsz传输文件、用户和用户组相关配置文件与管理

利用rz、sz实现Linux与Windows互传文件 [root@centos01 ~]# yum install -y lrzsz # 安装工具sz test.txt # 弹出对话框,传递到选择的路径下rz # 回车后,会从对话框中选择对应的文件传递...

野雪球
16分钟前
0
0
OSChina 周四乱弹 —— 毒蛇当辣条

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @ 达尔文:分享花澤香菜/前野智昭/小野大輔/井上喜久子的单曲《ミッション! 健?康?第?イチ》 《ミッション! 健?康?第?イチ》- 花澤香菜/前野智...

小小编辑
今天
5
2
java -jar运行内存设置

java -Xms64m #JVM启动时的初始堆大小 -Xmx128m #最大堆大小 -Xmn64m #年轻代的大小,其余的空间是老年代 -XX:MaxMetaspaceSize=128m # -XX:CompressedClassSpaceSize=6...

李玉长
今天
1
0
Spring | 手把手教你SSM最优雅的整合方式

HEY 本节主要内容为:基于Spring从0到1搭建一个web工程,适合初学者,Java初级开发者。欢迎与我交流。 MODULE 新建一个Maven工程。 不论你是什么工具,选这个就可以了,然后next,直至finis...

冯文议
今天
1
0
RxJS的另外四种实现方式(四)——性能最高的库(续)

接上一篇RxJS的另外四种实现方式(三)——性能最高的库 上一篇文章我展示了这个最高性能库的实现方法。下面我介绍一下这个性能提升的秘密。 首先,为了弄清楚Most库究竟为何如此快,我必须借...

一个灰
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部