您的位置:首页 > 其它

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

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: