Android 获取设备所有应用信息
来源:互联网 发布:linq 修改数据 编辑:程序博客网 时间:2024/05/21 09:51
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; // 应用图标@Overridepublic 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;@Overrideprotected 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 0
- Android 获取设备所有应用信息
- 获取当前设备所有应用基础信息
- android获取设备和应用信息
- 获取android设备已安装应用信息
- 获取android设备已安装应用信息
- Android设备信息获取
- android 获取设备信息
- Android 获取设备信息
- android获取设备信息
- 获取android设备信息
- android 获取设备信息
- 获取Android设备信息
- android 获取设备信息
- *****Android设备信息获取
- Android设备信息获取
- android设备信息获取
- android获取设备信息
- android获取设备信息
- android startService小例子
- 去掉PowerDesigner中生成sql的双引号
- 关于16年2月14日以后上传AppStore出现:Missing iOS Distribution signing identity for...的问题
- HNOI 2013 bzoj 3142 数列
- 工作小记
- Android 获取设备所有应用信息
- Sendmail的一些坑
- ArrayAdapter<String>使用,布局设置内容,listview 设置setOnItemClickListener无响应
- linux下socket的用法详解
- discuz的daddslashes详解
- 学习的艺术——如何学好一门技术、语言
- python k-近邻算法
- VelocityTracker的简单研究
- Shell文本编辑-修改hosts