Android 获取设备所有应用信息

Android 应用软件安装后会有一些关于本应用的消息。这些应用基本消息对于我们开发者来说很重要当你要更新应用版本的时候或者A应用启动B应用等。所以怎么来获取手机设备上应用软件的基本信息是独立开发者不会的活。

A、问题:

1、怎么获取设备应用信息;

2、怎么判断应用是否是系统应用;

3、获取应用信息能干啥?

应用信息基类:AppInfo

import android.graphics.drawable.Drawable;
import android.util.Log;
/**
 * 
 * @author 野虎
 *	2016年2月23日上午11:53:52
 */
public class AppInfo {
	public String appName ; // 应用名
	public String packageName ; // 包名
	public String versionName ; // 版本名 
	public int versionCode = 0; // 版本号
	public Drawable appIcon = null; // 应用图标

	@Override
	public String toString() {
		return appName+" , "+packageName+" ,"+versionName+" ,"+versionCode;
	}

}
核心类:应用信息工具类 ApplicationInfoUtil

import java.util.ArrayList;
import java.util.List;

import android.content.Context;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException;

/**
 * 应用信息获取类
 * 
 * @author 野虎
 * @时间 2016年2月23日下午3:47:13
 */
public class ApplicationInfoUtil {
	public static final int DEFAULT = 0; // 默认 所有应用
	public static final int SYSTEM_APP = DEFAULT + 1; // 系统应用
	public static final int NONSYSTEM_APP = DEFAULT + 2; // 非系统应用

	/**
	 * 根据包名获取相应的应用信息
	 * 
	 * @param context
	 * @param packageName
	 * @return 返回包名所对应的应用程序的名称。
	 */
	public static String getProgramNameByPackageName(Context context,
			String packageName) {
		PackageManager pm = context.getPackageManager();
		String name = null;
		try {
			name = pm.getApplicationLabel(
					pm.getApplicationInfo(packageName,
							PackageManager.GET_META_DATA)).toString();
		} catch (NameNotFoundException e) {
			e.printStackTrace();
		}
		return name;
	}

	/**
	 * 获取手机所有应用信息
	 * 
	 * @param applist
	 * @param context
	 */
	public static void getAllProgramInfo(List<AppInfo> allApplist,
			Context context) {
		getAllProgramInfo(allApplist, context, DEFAULT);
	}

	/**
	 * 获取手机所有应用信息
	 * 
	 * @param applist
	 * @param context
	 * @param type
	 *            标识符 是否区分系统和非系统应用
	 */
	public static void getAllProgramInfo(List<AppInfo> applist,
			Context context, int type) {
		ArrayList<AppInfo> appList = new ArrayList<AppInfo>(); // 用来存储获取的应用信息数据
		List<PackageInfo> packages = context.getPackageManager()
				.getInstalledPackages(0);

		for (int i = 0; i < packages.size(); i++) {
			PackageInfo packageInfo = packages.get(i);
			AppInfo tmpInfo = new AppInfo();
			tmpInfo.appName = packageInfo.applicationInfo.loadLabel(
					context.getPackageManager()).toString();
			tmpInfo.packageName = packageInfo.packageName;
			tmpInfo.versionName = packageInfo.versionName;
			tmpInfo.versionCode = packageInfo.versionCode;
			tmpInfo.appIcon = packageInfo.applicationInfo.loadIcon(context
					.getPackageManager());
			switch (type) {
			case NONSYSTEM_APP:
				if (!isSystemAPP(packageInfo)) {
					applist.add(tmpInfo);
				}
				break;
			case SYSTEM_APP:
				if (isSystemAPP(packageInfo)) {
					applist.add(tmpInfo);
				}
				break;
			default:
				applist.add(tmpInfo);
				break;
			}

		}
	}

	/**
	 * 获取所有系统应用信息
	 * 
	 * @param context
	 * @return
	 */
	public static List<AppInfo> getAllSystemProgramInfo(Context context) {
		List<AppInfo> systemAppList = new ArrayList<AppInfo>();
		getAllProgramInfo(systemAppList, context, SYSTEM_APP);
		return systemAppList;
	}

	/**
	 * 获取所有非系统应用信息
	 * 
	 * @param context
	 * @return
	 */
	public static List<AppInfo> getAllNonsystemProgramInfo(Context context) {
		List<AppInfo> nonsystemAppList = new ArrayList<AppInfo>();
		getAllProgramInfo(nonsystemAppList, context, NONSYSTEM_APP);
		return nonsystemAppList;
	}

	/**
	 * 判断是否是系统应用
	 * 
	 * @param packageInfo
	 * @return
	 */
	public static Boolean isSystemAPP(PackageInfo packageInfo) {
		if ((packageInfo.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) == 0) { // 非系统应用
			return false;
		} else { // 系统应用
			return true;
		}
	}
}
UI显示类:MainActivity

import java.util.ArrayList;
import java.util.List;

import android.app.Activity;
import android.content.res.Resources;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.ListView;
import android.widget.TextView;

public class MainActivity extends Activity {
	private TextView tv_flag;
	private ListView lv;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		tv_flag = (TextView) findViewById(R.id.tv_flag);
		lv = (ListView) findViewById(R.id.lv);
	}

	public void appInfo_all(View v) {
		List<AppInfo> appList = new ArrayList<AppInfo>();
				ApplicationInfoUtil.getAllProgramInfo(appList, this);
		setAdapter(appList);
		tv_flag.setText(getResources().getString(R.string.appInfo_all)+appList.size()+"个");
	}

	public void appInfo_system(View v) {
		List<AppInfo> systemAppList = ApplicationInfoUtil.getAllSystemProgramInfo(this);
		setAdapter(systemAppList);
		tv_flag.setText(getResources().getString(R.string.appInfo_system)+systemAppList.size()+"个");
	}

	public void appInfo_nonsystem(View v) {
		List<AppInfo> nonsystemAppList = ApplicationInfoUtil.getAllNonsystemProgramInfo(this);
		setAdapter(nonsystemAppList);
		tv_flag.setText(getResources().getString(R.string.appInfo_nonsystem)+nonsystemAppList.size()+"个");
	}
	public void setAdapter(List<AppInfo> appList){
		AppInfoAdapter adapter = new AppInfoAdapter(this, appList);
		lv.setAdapter(adapter);
	}
}

布局很简单就不贴了^_^ !
效果图如下:




  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值