获得所有安装的应用,复杂ListView的显示
2014-09-11 15:55
274 查看
39.获得手机上安装的所有应用程序信息
要获得手机上安装的应用程序的信息,需要用包管理器:PackageManager.
获得所有已经安装在手机上的应用程序包信息:
List<PackageInfo> packInfos = pm.getInstalledPackages(int flags);
其中,参数flags: Additional option flags,是可选的,以后遇到这样的flags,我们直接赋为0.
for (PackageInfo packInfo : packInfos){
这里的每个packInfo都相当于一个应用程序apk包的清单文件,而一个程序的安装信息都在清单文件中。
包名、版本号、版本名都在manifest根节点下,可以直接获得,如获得程序包名:
String packname = packInfo.packageName;
而应用程序的图标、应用程序名等信息都是在清单文件的application节点下,需要先拿到application节点,然后再获得相应的信息,如获得应用程序的图标及应用程序名:
Drawable icon = packInfo.applicationInfo.loadIcon(pm);
String name = packInfo.applicationInfo.loadLabel(pm).toString();
判断应用程序是否为系统应用程序时,需要先得到该应用程序的标记,然后跟系统应用的标记做与操作,如果不为0,则为系统应用程序:
int flags = packInfo.applicationInfo.flags;
if((flags & ApplicationInfo.FLAG_SYSTEM) == 0){
该应用程序为用户安装程序
}else{
该程序为系统应用程序
}
判断应用程序是否安装在SD卡上,也需要用应用程序的标记跟外部存储的标记做与操作,如果不为0,则应用程序就安装在SD卡上:
if((flags & ApplicationInfo.FLAG_EXTERNAL_STORAGE) == 0){
该应用程序安装在手机内存上
}else{
该应用程序安装在SD卡上
}
}
设置应用程序的优先安装位置为外部存储设备:
在清单文件中的manifest节点属性中,增加android:installLocation="preferExternal"代码即可。默认情况是装在手机内存上。
40.复杂ListView的显示
如:显示程序列表的ListView,由于程序分为用户程序和系统程序,所以可以在所有用户程序显示之前添加一个TextView来显示用户程序的个数,在系统程序之前也添加一个TextView用来显示系统程序的个数,而显示程序的布局跟这个Textview是不同的。此时的ListView的长度比之前要+2.如下图:
所以在复用convertView时,不仅要判断是否为空,还要判断这个convertView是否是合适的类型去复用。如:if(converView != null && convertViewinstanceof RelativeLayout)
如果想让ListView滑动时,Textview的位置不动,其实现方法是将ListView放到帧布局中,并且在ListView后面再定义一个Textview(帧布局的显示效果是:靠后定义的位于靠前定义的上面,这样就可以实现Textview不会滑动的效果),然后给ListView添加一个滚动监听器,在onScroll方法中,判断参数firstVisibleItem是否大于用户程序数,如果大于则设置Textview为系统程序,else为用户程序。
ListView右边快速滚动的实现,增加属性:
android:fastScrollEnabled="true"
要获得手机上安装的应用程序的信息,需要用包管理器:PackageManager.
获得所有已经安装在手机上的应用程序包信息:
List<PackageInfo> packInfos = pm.getInstalledPackages(int flags);
其中,参数flags: Additional option flags,是可选的,以后遇到这样的flags,我们直接赋为0.
for (PackageInfo packInfo : packInfos){
这里的每个packInfo都相当于一个应用程序apk包的清单文件,而一个程序的安装信息都在清单文件中。
包名、版本号、版本名都在manifest根节点下,可以直接获得,如获得程序包名:
String packname = packInfo.packageName;
而应用程序的图标、应用程序名等信息都是在清单文件的application节点下,需要先拿到application节点,然后再获得相应的信息,如获得应用程序的图标及应用程序名:
Drawable icon = packInfo.applicationInfo.loadIcon(pm);
String name = packInfo.applicationInfo.loadLabel(pm).toString();
判断应用程序是否为系统应用程序时,需要先得到该应用程序的标记,然后跟系统应用的标记做与操作,如果不为0,则为系统应用程序:
int flags = packInfo.applicationInfo.flags;
if((flags & ApplicationInfo.FLAG_SYSTEM) == 0){
该应用程序为用户安装程序
}else{
该程序为系统应用程序
}
判断应用程序是否安装在SD卡上,也需要用应用程序的标记跟外部存储的标记做与操作,如果不为0,则应用程序就安装在SD卡上:
if((flags & ApplicationInfo.FLAG_EXTERNAL_STORAGE) == 0){
该应用程序安装在手机内存上
}else{
该应用程序安装在SD卡上
}
}
设置应用程序的优先安装位置为外部存储设备:
在清单文件中的manifest节点属性中,增加android:installLocation="preferExternal"代码即可。默认情况是装在手机内存上。
40.复杂ListView的显示
如:显示程序列表的ListView,由于程序分为用户程序和系统程序,所以可以在所有用户程序显示之前添加一个TextView来显示用户程序的个数,在系统程序之前也添加一个TextView用来显示系统程序的个数,而显示程序的布局跟这个Textview是不同的。此时的ListView的长度比之前要+2.如下图:
所以在复用convertView时,不仅要判断是否为空,还要判断这个convertView是否是合适的类型去复用。如:if(converView != null && convertViewinstanceof RelativeLayout)
如果想让ListView滑动时,Textview的位置不动,其实现方法是将ListView放到帧布局中,并且在ListView后面再定义一个Textview(帧布局的显示效果是:靠后定义的位于靠前定义的上面,这样就可以实现Textview不会滑动的效果),然后给ListView添加一个滚动监听器,在onScroll方法中,判断参数firstVisibleItem是否大于用户程序数,如果大于则设置Textview为系统程序,else为用户程序。
ListView右边快速滚动的实现,增加属性:
android:fastScrollEnabled="true"
相关文章推荐
- Android 获取所有安装应用显示在listview上
- 获得Android系统所有已安装的应用并联网自动检测升级更新
- 利用私有的API获得手机上所安装的所有应用信息
- 获得Android系统所有已安装的应用并联网自动检测升级更新
- [小代码]获得所有已安装应用的名字,包名,版本,图标
- 利用私有的API获得手机上所安装的所有应用信息(包括版本,名称,bundleID,类型)
- 获得Android系统所有已安装的应用并联网自动检测升级更新
- 获得Android系统所有已安装的应用并联网自动检测升级更新
- 获得Android系统所有已安装的应用并联网自动检测升级更新
- Android自定义Dialog布局listview 实现显示安装的应用
- Android中使用GridView分页显示系统所安装的应用,支持拖动与手势滑动
- 实现读取手机中所有联系人的主要信息(名称和联系电话),并以ListView显示
- android获得安装的应用程序(过滤系统应用)
- Android应用隐藏在所有程序列表内显示图标
- Android中使用GridView分页显示系统所安装的应用,支持拖动与手势滑动
- Android 获得 已安装的 应用
- Android应用中使用ListView实现数据列表显示(传智播客视频笔记)
- Android获得已安装应用大小
- Android中使用GridView分页显示系统所安装的应用,支持拖动与手势滑动
- 应用实例:解析后台返回的数据,把每条都显示在ListView中,包括活动图片、店名、活动详情、地址、电话和距离等。