Android获取手机应用程序包的信息
Android获取手机应用程序包的信息
今日竹石 发表于4年前
Android获取手机应用程序包的信息
  • 发表于 4年前
  • 阅读 37
  • 收藏 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
博文 228
码字总数 181721
评论 (0)
×
今日竹石
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: