此文章写作背景来自于,自己有需要指定已安装app显示,但是网上并没有理想的自己想要的资料,所以自己整理一份,大牛请忽略。
部分信息来自于:http://blog.csdn.net/qinjuning/article/details/6867806
我把自己demo的代码都贴上去了,命名规范,很容易理解,也有多余的代码,希望不要干扰到大家理解和使用。
先看效果图:
请主要留意onCreateView(),getApplications(),MyAdapter.getView()中关于packagement的相关使用。
package com.marttinli.qromstudy1_1;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import android.R.integer;
import android.app.Activity;
import android.app.ListActivity;
import android.content.Intent;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import com.tencent.qrom.support.v4.app.Fragment;
import com.tencent.qrom.widget.ListView;
import com.tencent.qrom.widget.Toast;
public class MyListFragment extends Fragment {
List<PackageInfo> list = new ArrayList<>();;
onItemSelectedListener mListener;
PackageManager packageManager;
public static final int FILTER_ALL_APP = 0; // 所有应用程序
public static final int FILTER_SYSTEM_APP = 1; // 系统程序
public static final int FILTER_THIRD_APP = 2; // 第三方应用程序
public static final int FILTER_SDCARD_APP = 3; // 安装在SDCard的应用程序
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
try {
mListener = (onItemSelectedListener) activity;
} catch (ClassCastException e) {
throw new ClassCastException(activity.toString()
+ " must implement onItemSelectedListener");
}
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_section_dummy,
container, false);
packageManager = getActivity().getPackageManager();
List<PackageInfo> mlist = packageManager.getInstalledPackages(0);
list.addAll(getApplications(mlist, FILTER_THIRD_APP));
ListView listView = (ListView) rootView.findViewById(R.id.listview);
listView.setAdapter(new MyAdapter());
return rootView;
}
private List<PackageInfo> getApplications(List<PackageInfo> mlist, int flag) {
List<PackageInfo> l = new ArrayList<PackageInfo>();
switch (flag) {
case FILTER_ALL_APP:
l.addAll(mlist);
break;
case FILTER_SYSTEM_APP:
for (PackageInfo packageInfo : mlist) {
if ((packageInfo.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) != 0) {
l.add(packageInfo);
}
}
break;
case FILTER_THIRD_APP:
for (PackageInfo packageInfo : mlist) {
if ((packageInfo.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) <= 0) {
l.add(packageInfo);
}// 本来是系统程序,被用户手动更新后,该系统程序也成为第三方应用程序了
else if ((packageInfo.applicationInfo.flags & ApplicationInfo.FLAG_UPDATED_SYSTEM_APP) != 0) {
l.add(packageInfo);
}
}
break;
case FILTER_SDCARD_APP:
for (PackageInfo packageInfo : mlist) {
if ((packageInfo.applicationInfo.flags & ApplicationInfo.FLAG_EXTERNAL_STORAGE) != 0) {
l.add(packageInfo);
}
}
break;
default:
break;
}
return l;
}
public interface onItemSelectedListener {
public void onItemSelected(int position);
}
public void onListItemClick(ListView l, View v, int position, long id) {
// TODO Auto-generated method stub
mListener.onItemSelected(position);
}
class MyAdapter extends BaseAdapter {
@Override
public int getCount() {
return list.size();
}
@Override
public Object getItem(int arg0) {
// TODO Auto-generated method stub
return list.get(arg0);
}
@Override
public long getItemId(int arg0) {
// TODO Auto-generated method stub
return arg0;
}
@Override
public View getView(int arg0, View convertView, ViewGroup arg2) {
Holder holder;
if (null == convertView) {
holder = new Holder();
convertView = (LinearLayout) LayoutInflater.from(getActivity())
.inflate(R.layout.item2_listview, null);
holder.iconView = (ImageView) convertView
.findViewById(R.id.imageView1);
holder.textView = (TextView) convertView
.findViewById(R.id.textView1);
holder.button = (Button) convertView.findViewById(R.id.button1);
convertView.setTag(holder);
} else {
holder = (Holder) convertView.getTag();
}
final PackageInfo app = list.get(arg0);
holder.iconView.setImageDrawable(packageManager
.getApplicationIcon(app.applicationInfo));
holder.textView.setText(packageManager.getApplicationLabel(
app.applicationInfo).toString());
holder.button.setText("打开");
holder.button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = packageManager
.getLaunchIntentForPackage(app.packageName);
getActivity().startActivity(intent);
}
});
return convertView;
}
class Holder {
public ImageView iconView;
public TextView textView;
public Button button;
}
}
}