Android中获取应用程序(包)的信息----------PackageManager的使用一
来源:互联网 发布:淘宝小号 浮云网 编辑:程序博客网 时间:2024/06/17 15:05
如何获取Android系统中应用程序的信息,主要包括packagename,label,icon,占用大小等。具体分为两部分:
1:获取应用程序的packagename,label,icon等;
2:获取应用程序的占用大小,包括:缓存大小(cachsize),数据大小(datasize)。
开发Launcher时,会更多的使用,Android系统为我们提供了很多服务管理的类,如ActivityManager,PowerManager,AudioManager,PackagerManager,NotificationManager等等。
而PackageManager主要职责是管理应用程序包。通过它,可以获取应用程序信息.
AndroidManifest.xml文件节点说明:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.simple.launcher"><application android:supportsRtl="true" > <activity android:name=".Launcher" android:launchMode="singleTask" android:screenOrientation="portrait" android:theme="@style/activity_Theme"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> <category android:name="android.intent.category.HOME" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.MONKEY" /> </intent-filter> </activity></application></manifest>
一: 相关类:
总包括的就是PackageInfo,提供了节点的基类的基本信息:a label,icon,meta-data。而它由子类继承然后调用相应的方法.
常用字段:
public int icon 获得该资源图片在R文件中的值 (对应于android:icon属性) public int labelRes 获得该label在R文件中的值(对应于android:label属性) public String name 获得该节点的name值 (对应于android:name属性) public String packagename 获得该应用程序的包名 (对应于android:packagename属性)
常用方法:
Drawable loadIcon(PackageManager pm) 获得当前应用程序的图像 CharSequence loadLabel(PackageManager pm) 获得当前应用程序的label
ActivityInfo类继承PackageItemInfo
说明: 获得应用程序中或者 节点的信息 。我们可以通过它来获取我们设置的任 何属性,包括
theme 、launchMode、launchmode等
常用方法继承至PackageItemInfo类中的loadIcon()和loadLabel()
pplicationInfo类 继承自 PackageItemInfo
说明:获取一个特定引用程序中节点的信息。
字段说明:
flags字段: FLAG_SYSTEM 系统应用程序
FLAG_EXTERNAL_STORAGE 表示该应用安装在sdcard中
常用方法继承至PackageItemInfo类中的loadIcon()和loadLabel()
当然了还有很多基类:ServiceInfo ,ResolveInfo等等都是与上述类似的。
PackageInfo类
说明:手动获取AndroidManifest.xml文件的信息 。
常用字段:
public String packageName 包名
public ActivityInfo[] activities 所有节点信息
public ApplicationInfo applicationInfo 节点信息,只有一个
public ActivityInfo[] receivers 所有节点信息,多个
public ServiceInfo[] services 所有节点信息 ,多个
PackageManger 类
说明: 获得已安装的应用程序信息 。可以通过getPackageManager()方法获得。
常用方法:
public abstract PackageManager getPackageManager()
功能:获得一个PackageManger对象
public abstrac tDrawable getApplicationIcon(StringpackageName)
参数: packageName 包名
功能:返回给定包名的图标,否则返回null
public abstract ApplicationInfo getApplicationInfo(String packageName, int flags)
参数:packagename 包名
flags 该ApplicationInfo是此flags标记,通常可以直接赋予常数0即可
功能:返回该ApplicationInfo对象
public abstract List getInstalledApplications(int flags)
参数:flag为一般为GET_UNINSTALLED_PACKAGES,那么此时会返回所有ApplicationInfo。我们可以对ApplicationInfo的flags过滤,得到我们需要的。
功能:返回给定条件的所有PackageInfo
public abstract List 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 queryIntentActivities(Intent intent, int flags)
参数同上
功能 :返回给定条件的所有ResolveInfo对象(本质上是Activity),集合对象
public abstract ResolveInfo resolveService(Intent intent, int flags)
参数同上
功能 :返回给定条件的ResolveInfo对象(本质上是Service)
public abstract List queryIntentServices(Intent intent, int flags)
参数同上
功能 :返回给定条件的所有ResolveInfo对象(本质上是Service),集合对象
二,案例讲解
1,通过queryIntentActivities()方法,查询Android系统的所有具备ACTION_MAIN和CATEGORY_LAUNCHER的Intent的应用程序,点击后,能启动该应用,说白了就是做一个类似Home程序的简易Launcher。
2:通过getInstalledApplications()方法获取应用,然后对其过滤,查找出我们需要的第三方应用,系统应用,安装在sdcard的应用。
xml布局就不用写了,我这里直接写出主要代码:
AppInfo.java:保存应用程序的Model类
public class AppInfo {private String appLabel; //应用程序标签private int appIcon;//应用程序所对应的图标private Drawable appDrawableIcon;//应用程序图像private String appPkg;//应用程序所对应的包名 private String appClassName;//应用程序所对应的主界面名字private int background;//应用程序所对应的背景public AppInfo() {} }
在MainActivity.java中编写工程逻辑,
public class Launcher extends FragmentActivity implements ViewPager.OnPageChangeListener {private static final String TAG = "Launcher";private static final int sFIRST_WORKSPACE = 0;private static final int sDEFAULT_WORKSPACE = 1;private static final int sTHIRD_WORKSPACE = 2;private static final int sFOURTH_WORKSPACE = 3;private static final int PERMISSION_REQUEST = 4;private static final int PERMISSION_ALL_ALLOWED = 5;private static final int PERMISSION_ALL_DENIED = 6;private static final int MINI_SDK_RETURN_VALUE = -1;public static boolean permissionFlag = false;private int mCurrPosition = sDEFAULT_WORKSPACE;public static boolean animAble = false;AppSectionsPagerAdapter mAppSectionsPagerAdapter;ViewPager mViewPager;private Context mContext = null;private int mfocusPosition = 0;private View mRootView;public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); initRootView(); mContext = this; initViewPager();} public void initViewPager() { mViewPager = (ViewPager) findViewById(R.id.pager); FragmentManager fm = getSupportFragmentManager(); int mViewPagerId = mViewPager.getId(); ArrayList<LauncherFragment> fragments = getFragments(mViewPagerId, fm); mAppSectionsPagerAdapter = new AppSectionsPagerAdapter( fm,fragments); mViewPager.setAdapter(mAppSectionsPagerAdapter); mViewPager.setCurrentItem(mCurrPosition); mViewPager.setOnPageChangeListener(this);}
主LauncherFragment提供各分页视图:
public abstract class LauncherFragment<T extends AppInfo> extends Fragment implements AdapterView.OnItemLongClickListener, AdapterView.OnItemClickListener, AdapterView.OnItemSelectedListener {private static final String TAG = "LauncherFragment";private boolean mIsActived;protected LauncherGridView mGridView;protected Context mContext;protected BaseGridAdapter mAdapter;protected List<T> mDatas = new ArrayList<T>();public List<T> getDatas() { return mDatas;}public void setDatas(List<T> datas) { this.mDatas = datas;}public BaseGridAdapter getAdapter() { return mAdapter;}public void setAdapter(BaseGridAdapter adapter) { this.mAdapter = adapter;}public LauncherGridView getGridView() { return mGridView;}public void setGridView(LauncherGridView gridView) { this.mGridView = gridView;}public LauncherFragment() { mIsActived = false;}public boolean isActived() { return mIsActived;}public void setActived(boolean actived) { mIsActived = actived;}@Overridepublic void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mContext = getActivity(); mDatas = loadData(); if (mDatas == null) { mDatas = new ArrayList<T>(); }}@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View root = inflater.inflate(R.layout.fragment_pager, container, false); initGridView(root); registerContentObservers(); return root;}protected void initGridView(View root) { mGridView = (LauncherGridView) root.findViewById(R.id.default_grid_view); mGridView.setSelector(mContext.getResources().getDrawable(R.color.transparent)); // View click Listener mGridView.setOnItemClickListener(this); // view has focus Listener mGridView.setOnItemSelectedListener(this);}@Overridepublic void onDestroyView() { super.onDestroyView(); unregisterContentObservers();}@Overridepublic void onDestroy() { super.onDestroy(); if (mDatas != null) { mDatas.clear(); mDatas = null; }}@Overridepublic void onNothingSelected(AdapterView<?> parent) {}protected Intent intentForPosition(int position) { T info = getData(position); Intent intent = new Intent(); if (info != null) { intent.setClassName(info.getAppPkg(), info.getAppClassName()); } AppIntentUtil.intentSetFlag(intent); return intent;}public T getData(int position) { T data = mDatas != null && position > -1 && position < mDatas.size() ? mDatas.get(position) : null; return data;}}
以上主要是我编写Launcher时所用的主逻辑,Launcher开发和我们开发Apk其实是一样的.
- 【Android】获取应用程序(包)的信息-----PackageManager的使用(一)
- Android中获取应用程序(包)的信息-----PackageManager的使用
- Android中获取应用程序(包)的信息-----PackageManager的使用
- Android中获取应用程序(包)的信息-----PackageManager的使用
- Android中获取应用程序(包)的信息-----PackageManager的使用
- Android中获取应用程序(包)的信息-----PackageManager的使用
- Android中获取应用程序(包)的信息-----PackageManager的使用
- Android中获取应用程序(包)的信息-----PackageManager的使用
- Android中获取应用程序(包)的信息--PackageManager的使用
- Android中获取应用程序(包)的信息-----PackageManager的使用
- Android中获取应用程序(包)的信息-----PackageManager的使用
- Android中获取应用程序(包)的信息-----PackageManager的使用(一)
- Android中获取应用程序(包)的信息-----PackageManager的使用(一)
- Android中获取应用程序(包)的信息-----PackageManager的使用(一)
- Android中获取应用程序(包)的信息-----PackageManager的使用(一)
- Android中获取应用程序(包)的信息-----PackageManager的使用(一)
- Android中获取应用程序(包)的信息-----PackageManager的使用(一)
- Android中获取应用程序(包)的信息-----PackageManager的使用(一)
- Mac OSX下编译 Hadoop 2.6.4
- windows7 + Redhat-server7.双系统中win7启动项丢失的解决
- 剑指offer面试题63 序列化二叉树(java实现)
- C语言指针使用不当带来的内存不可读
- 挑战程序竞赛系列(27):3.5二分图匹配(2)
- Android中获取应用程序(包)的信息----------PackageManager的使用一
- 使用ColorMatrix改变图片的饱和度
- JavaSE编程基础 第三章 控制语句
- 修改wamp的apache默认端口80以及www目录
- 抽取文本中的日期和时间
- JavaSE编程基础 第四章 数组
- HBase如何合理设置客户端Write Buffer
- 63. Unique Paths II
- shell 下不能使用tab补全命令