获取应用程序所有安装包信息
2013-12-19 15:41
363 查看
PackageManger 类
说明: 获得已安装的应用程序信息 。可以通过getPackageManager()方法获得。常用方法:
public abstract PackageManager getPackageManager()
功能:获得一个PackageManger对象
public abstrac tDrawable
getApplicationIcon(StringpackageName)
参数: packageName 包名
功能:返回给定包名的图标,否则返回null
public
abstractApplicationInfo getApplicationInfo(String
packageName, int flags)
参数:packagename 包名
flags 该ApplicationInfo是此flags标记,通常可以直接赋予常数0即可
功能:返回该ApplicationInfo对象
public abstract List<ApplicationInfo>
getInstalledApplications(int flags)
参数:flag为一般为GET_UNINSTALLED_PACKAGES,那么此时会返回所有ApplicationInfo。我们可以对ApplicationInfo
的flags过滤,得到我们需要的。
功能:返回给定条件的所有PackageInfo
public abstractList<PackageInfo>
getInstalledPackages(int flags)
参数如上
功能:返回给定条件的所有PackageInfo
public abstractResolveInfo
resolveActivity(Intent
intent, int flags)
参数: intent 查寻条件,Activity所配置的action和category
flags:MATCH_DEFAULT_ONLY
:Category必须带有CATEGORY_DEFAULT的Activity,才匹配
GET_INTENT_FILTERS
:匹配Intent条件即可
GET_RESOLVED_FILTER
:匹配Intent条件即可
功能 :返回给定条件的ResolveInfo对象(本质上是Activity)
public abstract List<ResolveInfo>
queryIntentActivities(Intent
intent, int flags)
参数同上
功能 :返回给定条件的所有ResolveInfo对象(本质上是Activity),集合对象
public abstractResolveInfo
resolveService(Intent
intent, int flags)
参数同上
功能 :返回给定条件的ResolveInfo对象(本质上是Service)
public abstractList<ResolveInfo>queryIntentServices(Intent
intent, int flags)
参数同上
功能 :返回给定条件的所有ResolveInfo对象(本质上是Service),集合对象
1.DEMO:
app_info.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="vertical" > <ListView android:id="@+id/listview" android:layout_width="fill_parent" android:layout_height="wrap_content" ></ListView> </LinearLayout>
snippetlistrow.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/app_icon" android:layout_width="wrap_content" android:layout_height="wrap_content" android:padding="5dp" android:scaleType="centerCrop" /> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:gravity="center_vertical" android:orientation="vertical" android:paddingLeft="5dp" > <TextView android:id="@+id/app_name" android:layout_width="wrap_content" android:layout_height="wrap_content" android:gravity="center_vertical" android:textStyle="bold" /> <TextView android:id="@+id/app_package" android:layout_width="wrap_content" android:layout_height="wrap_content" android:gravity="center_vertical" /> </LinearLayout> <TextView android:id="@+id/app_system" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:gravity="center_vertical" android:paddingLeft="10dp" /> </LinearLayout>
<?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/app_icon" android:layout_width="wrap_content" android:layout_height="wrap_content" android:padding="5dp" android:scaleType="centerCrop" /> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:gravity="center_vertical" android:orientation="vertical" android:paddingLeft="5dp" > <TextView android:id="@+id/app_name" android:layout_width="wrap_content" android:layout_height="wrap_content" android:gravity="center_vertical" android:textStyle="bold" /> <TextView android:id="@+id/app_package" android:layout_width="wrap_content" android:layout_height="wrap_content" android:gravity="center_vertical" /> </LinearLayout> <TextView android:id="@+id/app_system" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:gravity="center_vertical" android:paddingLeft="10dp" /> </LinearLayout>
snippetlistrow.xmlsnippetlistrow.xml
===================================JAVA代码===================================
AllAppsActivity.class
package com.example.webservicedemo; import java.util.ArrayList; import java.util.List; import android.annotation.SuppressLint; import android.app.Activity; import android.content.Context; import android.content.Intent; import android.content.pm.ApplicationInfo; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.net.Uri; import android.os.Bundle; import android.provider.Settings; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.BaseAdapter; import android.widget.ImageView; import android.widget.ListView; import android.widget.TextView; @SuppressLint("InlinedApi") public class AllAppsActivity extends Activity { private PackageManager packageManager = null; private List<ApplicationInfo> applist = null; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.app_info); ListView list = (ListView) findViewById(R.id.listview); packageManager = getPackageManager(); applist = checkForLaunchIntent(packageManager .getInstalledApplications(PackageManager.GET_META_DATA)); list.setAdapter(new ApplicationAdapter(AllAppsActivity.this, applist)); list.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { uninstallApp(AllAppsActivity.this, applist.get(position).packageName); } }); } // (注:1、两种方式均可;2、appPackage为resolveInfo.activityInfo.packageName) public void uninstallApp(Context context, String appPackage) { Uri packageURI = Uri.parse("package:" + appPackage); // 自定义卸载 // Intent uninstallIntent = new Intent(Intent.ACTION_DELETE, // packageURI); // ((Activity)context).startActivityForResult(uninstallIntent, 0); // 调用系统自带卸载操作进行卸载 Intent uninstallIntent = new Intent( Settings.ACTION_APPLICATION_DETAILS_SETTINGS, packageURI); context.startActivity(uninstallIntent); } private ArrayList<ApplicationInfo> checkForLaunchIntent( List<ApplicationInfo> list) { ArrayList<ApplicationInfo> applist = new ArrayList<ApplicationInfo>(); for (ApplicationInfo info : list) { if (packageManager.getLaunchIntentForPackage(info.packageName) != null) applist.add(info); } return applist; } class ApplicationAdapter extends BaseAdapter { private List<ApplicationInfo> appsList = null; private Context context; private PackageManager packageManager; public ApplicationAdapter(Context con, List<ApplicationInfo> applist) { this.context = con; this.appsList = applist; this.packageManager = context.getPackageManager(); } @Override public int getCount() { return ((null != appsList) ? appsList.size() : 0); } @Override public ApplicationInfo getItem(int position) { return ((null != appsList) ? appsList.get(position) : null); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder viewHolder = null; if (convertView == null) { convertView = LayoutInflater.from(context).inflate( R.layout.snippetlistrow, null); viewHolder = new ViewHolder(); viewHolder.appImg = (ImageView) convertView .findViewById(R.id.app_icon); viewHolder.appName = (TextView) convertView .findViewById(R.id.app_name); viewHolder.appPName = (TextView) convertView .findViewById(R.id.app_package); viewHolder.appSystem = (TextView) convertView .findViewById(R.id.app_system); convertView.setTag(viewHolder); } else { viewHolder = (ViewHolder) convertView.getTag(); } viewHolder.appImg.setImageDrawable(appsList.get(position).loadIcon( packageManager)); viewHolder.appName.setText(appsList.get(position).loadLabel( packageManager)); viewHolder.appPName.setText(appsList.get(position).packageName); viewHolder.appSystem .setText("" + filterApp(appsList.get(position))); return convertView; } public final class ViewHolder { public ImageView appImg; public TextView appName; public TextView appPName; public TextView appSystem; } /** * 判断某一个应用程序是不是系统的应用程序, 如果是返回true,否则返回false。 */ public boolean filterApp(ApplicationInfo info) { // 有些系统应用是可以更新的,如果用户自己下载了一个系统的应用来更新了原来的,它还是系统应用,这个就是判断这种情况的 if ((info.flags & ApplicationInfo.FLAG_UPDATED_SYSTEM_APP) != 0) { return true; } else if ((info.flags & ApplicationInfo.FLAG_SYSTEM) == 0) {// 判断是不是系统应用 return true; } return false; } } /** * 查询手机内非系统应用---待验证 * * @param context * @return */ public static List<PackageInfo> getAllApps(Context context) { List<PackageInfo> apps = new ArrayList<PackageInfo>(); PackageManager pManager = context.getPackageManager(); // 获取手机内所有应用 List<PackageInfo> pakList = pManager.getInstalledPackages(0); for (int i = 0; i < pakList.size(); i++) { PackageInfo pak = pakList.get(i); // 判断是否为非系统预装的应用程序 if ((pak.applicationInfo.flags & pak.applicationInfo.FLAG_SYSTEM) <= 0) { // customs applications apps.add(pak); } } return apps; } }
权限:
<uses-permission android:name="android.permission.READ_PHONE_STATE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.GET_TASKS" />
转载注明出处::/article/11601489.html
相关文章推荐
- Linux网络编程之循环服务器
- 黑马程序员_Java面向对象(上)
- ThinkPHP3.1.2整合UCenter详解(一)
- 启联web服务器更新至V1.1
- MFC ListBox,ComboBox笔记
- iptables 端口转发实例
- C++:浅说指针比较
- 机器指令 汇编 优化 编译概念的理解!
- windows下使用cygwin编译memcached1.4.15
- 修数字手表
- JS中的replace和replaceAll
- Linux网络编程之简单并发服务器
- 备忘剪贴环 - 让复制粘贴更容易
- Triangle
- AutoCompleteTextView的使用
- SQL Server和Access设置自增字段的区别
- Javadoc Guidelines
- Object-C 学习笔记(三十一)--- NSUserDefaults
- java容器取交集、并集、补集、差集示例
- Linux网络编程之高级并发服务器