获取应用程序所有安装包信息

来源:互联网 发布:c 经典书籍 知乎 编辑:程序博客网 时间:2024/04/30 11:14

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;@Overridepublic 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() {@Overridepublic 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();}@Overridepublic int getCount() {return ((null != appsList) ? appsList.size() : 0);}@Overridepublic ApplicationInfo getItem(int position) {return ((null != appsList) ? appsList.get(position) : null);}@Overridepublic long getItemId(int position) {return position;}@Overridepublic 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 applicationsapps.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" />


转载注明出处::http://blog.csdn.net/lixiaolei5446/article/details/17416661

0 0
原创粉丝点击