PackageManager获取指定类别应用程序
2015-09-24 20:26
453 查看
此文章写作背景来自于,自己有需要指定已安装app显示,但是网上并没有理想的自己想要的资料,所以自己整理一份,大牛请忽略。
部分信息来自于:/article/1390949.html
我把自己demo的代码都贴上去了,命名规范,很容易理解,也有多余的代码,希望不要干扰到大家理解和使用。
先看效果图:
请主要留意onCreateView(),getApplications(),MyAdapter.getView()中关于packagement的相关使用。
部分信息来自于:/article/1390949.html
我把自己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; } } }
相关文章推荐
- S5PV210的启动流程解读
- JS模拟简易滚动条
- 如何使用socket进行java网络编程(二)
- 设计模式之禅之六大设计原则-单一职责原则
- iOS开发开关
- Android samples API Demos之UI篇2(ActivitySceneTransitionBasic)
- Diskpart - convert disk to gpt format
- 【正则表达式】——限制只能输入数字和小数点及位数
- 《MySQL技术内幕:InnoDB存储引擎》第2版笔记
- 小到极致的单文件记事本替换工具合集:
- 网站无端卡死
- unsigned int reverse_bit(unsigned int value)
- windows下php+mysql+apache环境集成 简易版
- STL系列之二 stack栈
- UIStepper
- Android Handler 用法解析
- PHP中require和include路径问题详解
- keytool证书生成与导入
- linux下添加PATH环境变量
- 中英文字符串截取类