文档章节

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

今日竹石
 今日竹石
发布于 2014/04/23 17:50
字数 872
阅读 38
收藏 0
点赞 0
评论 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 渗透测试学习手册 第一章 Android 安全入门

第一章 Android 安全入门 作者:Aditya Gupta 译者:飞龙 协议:CC BY-NC-SA 4.0 Android 是当今最流行的智能手机操作系统之一。 随着人气的增加,它存在很多安全风险,这些风险不可避免地被...

apachecn_飞龙 ⋅ 2016/12/06 ⋅ 0

没有AI芯片,你的手机也能实现离线神经网络机器翻译

     编者按:去年10月份,微软跟华为合作,首先在具有AI芯片的Mate 10手机上实现了AI驱动型离线翻译功能。现在,Microsoft Translator将这一功能扩展到所有安卓、iOS和亚马逊Fire设备,...

微软亚洲研究院 ⋅ 04/19 ⋅ 0

揭密针对Android设备的物理取证方法(三)

今天,我将会介绍一些其他的Android设备的物理取证方法。前两次的分析,你可以点此(1.2)详细了解。 对摩托罗拉智能手机的取证 Oxygen开发了一种基于bootloader级别的CVE漏洞的技术,该技术...

技术小能手 ⋅ 06/08 ⋅ 0

Android项目实战(四十五):Usb转串口通讯(CH34xUARTDriver)

需求为:手机usb接口插入一个硬件,从硬件上获取数据 例如:手机usb插入硬件A,A通过蓝牙通讯获取设备a、b的数据,作为中转站(可以做些数据处理)将数据(设备a、b产生的)传给手机程序。 ...

听着music睡 ⋅ 04/28 ⋅ 0

Android包管理机制(一)PackageInstaller的初始化

前言 包管理机制是Android中的重要机制,是应用开发和系统开发需要掌握的知识点之一。 包指的是Apk、jar和so文件等等,它们被加载到Android内存中,由一个包转变成可执行的代码,这就需要一个...

刘望舒 ⋅ 06/19 ⋅ 0

Android基础性能数据获取(api或/proc/读取)

主要资料参考 Android系统源码在线查看网址 Linux平台Cpu使用率的计算 腾讯开源移动端性能测试APP:GT 3.1 内存篇 内存:表示当前进程内存的使用情况,内存占用过高可能会引起内存抖动,或O...

某杰 ⋅ 05/07 ⋅ 0

AndroidStudio常用DBShell命令总结

做了两年安卓开发,Androidstudio这个开发工具有一些快捷键还是挺熟练的,平常用得上的shell命令,现在我也做一下总结,总有用的: 显示系统中全部Android平台: android list targets 显示系...

大二架构师 ⋅ 05/11 ⋅ 0

Android性能优化:手把手教你如何让App更快、更稳、更省(含内存、布局优化等)

前言 在 开发中,性能优化策略十分重要 因为其决定了应用程序的开发质量:可用性、流畅性、稳定性等,是提高用户留存率的关键 本文全面讲解性能优化中的所有知识,献上一份 性能优化的详细攻...

Carson_Ho ⋅ 05/30 ⋅ 0

Android 渗透测试学习手册 第三章 Android 应用的逆向和审计

第三章 Android 应用的逆向和审计 作者:Aditya Gupta 译者:飞龙 协议:CC BY-NC-SA 4.0 在本章中,我们将查看 Android 应用程序或文件,并了解其不同的组件。 我们还将使用工具(如 Apktoo...

apachecn_飞龙 ⋅ 2016/12/11 ⋅ 0

AndroidThings之基础二 设计理念

转载自:https://blog.csdn.net/tangxiaoyin/article/details/75273491 (PS:目前AndroidThings已经走向消费级别,发布正式版本1.0版,开发板推荐树莓派3B+) 前言 2012 年 6 月,由 IoT-GSI(...

qq_28831197 ⋅ 05/09 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

博客迁移到 https://www.jianshu.com/u/aa501451a235

博客迁移到 https://www.jianshu.com/u/aa501451a235 本博客不再更新

为为02 ⋅ 38分钟前 ⋅ 0

win10怎么彻底关闭自动更新

win10自带的更新每天都很多,每一次下载都要占用大量网络,而且安装要等得时间也蛮久的。 工具/原料 Win10 方法/步骤 单击左下角开始菜单点击设置图标进入设置界面 在设置窗口中输入“服务”...

阿K1225 ⋅ 今天 ⋅ 0

Elasticsearch 6.3.0 SQL功能使用案例分享

The best elasticsearch highlevel java rest api-----bboss Elasticsearch 6.3.0 官方新推出的SQL检索插件非常不错,本文一个实际案例来介绍其使用方法。 1.代码中的sql检索 @Testpu...

bboss ⋅ 今天 ⋅ 0

informix数据库在linux中的安装以及用java/c/c++访问

一、安装前准备 安装JDK(略) 到IBM官网上下载informix软件:iif.12.10.FC9DE.linux-x86_64.tar放在某个大家都可以访问的目录比如:/mypkg,并解压到该目录下。 我也放到了百度云和天翼云上...

wangxuwei ⋅ 今天 ⋅ 0

PHP语言系统ZBLOG或许无法重现月光博客的闪耀历史[图]

最近在写博客,希望通过自己努力打造一个优秀的教育类主题博客,名动江湖,但是问题来了,现在写博客还有前途吗?面对强大的自媒体站点围剿,还有信心和可能型吗? 至于程序部分,我选择了P...

原创小博客 ⋅ 今天 ⋅ 0

IntelliJ IDEA 2018.1新特性

工欲善其事必先利其器,如果有一款IDE可以让你更高效地专注于开发以及源码阅读,为什么不试一试? 本文转载自:netty技术内幕 3月27日,jetbrains正式发布期待已久的IntelliJ IDEA 2018.1,再...

Romane ⋅ 今天 ⋅ 0

浅谈设计模式之工厂模式

工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 在工厂模式中,我们在创建对象时不会对客户端暴露创建逻...

佛系程序猿灬 ⋅ 今天 ⋅ 0

Dockerfile基础命令总结

FROM 指定使用的基础base image FROM scratch # 制作base image ,不使用任何基础imageFROM centos # 使用base imageFROM ubuntu:14.04 尽量使用官方的base image,为了安全 LABEL 描述作...

ExtreU ⋅ 昨天 ⋅ 0

存储,对比私有云和公有云的不同

导读 说起公共存储,很难不与后网络公司时代的选择性外包联系起来,但尽管如此,它还是具备着简单和固有的可用性。公共存储的名字听起来也缺乏专有性,很像是把东西直接堆放在那里而不会得到...

问题终结者 ⋅ 昨天 ⋅ 0

C++难点解析之const修饰符

C++难点解析之const修饰符 c++ 相比于其他编程语言,可能是最为难掌握,概念最为复杂的。结合自己平时的C++使用经验,这里将会列举出一些常见的难点并给出相应的解释。 const修饰符 const在c...

jackie8tao ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部