美文网首页
Android之获取应用程序信息

Android之获取应用程序信息

作者: huhu502 | 来源:发表于2016-07-20 22:41 被阅读155次

遇到的问题一:布局重用的问题

  • 1)返回值必须从0开始;代表不同的布局文件
  @Override
    public int getItemViewType(int position) {
        int flag=datas.get(position).getFlag();
        if(flag==10||flag==13){
            return 0;
        }else{
            return 1;
        }
    }
  • 2)listview中有两个不一样的布局
  @Override
    public int getViewTypeCount() {
        return 2;
    }
  • 3)这里面我发现它在type发生改变的时候convertview会置为空不然不会执行type==1的操作。但是还有一个问题就是,为什么系统程序的那个布局会变成用户程序的。
 int type=getItemViewType(position);
        if(convertView==null){
            if(type==0){
                inflate=(LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                convertView=inflate.inflate(R.layout.apps2_listview, parent,false);
                holder=new ViewHolder();
                holder.appname=(TextView) convertView.findViewById(R.id.name);
                convertView.setTag(holder);
            }
            if(type==1){
                inflate=(LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                convertView=inflate.inflate(R.layout.apps_listview, parent,false);
                holder=new ViewHolder(convertView);
                convertView.setTag(holder);
            }
        }else{
            holder=(ViewHolder) convertView.getTag();
        }
  • 4)个人感觉ViewHolder类就是用来复用findviewbyid
    private static class ViewHolder{
    public ImageView icon;
    public TextView appname;
    public TextView packagename;
    public TextView mode;
    public ViewHolder() {
    }
    ViewHolder(View view){
    icon=(ImageView) view.findViewById(R.id.image);
    appname=(TextView) view.findViewById(R.id.name);
    packagename=(TextView) view.findViewById(R.id.packname);
    mode=(TextView) view.findViewById(R.id.mode);
    }
    }

问题二:获取系统应用程序和用户应用程序的方法

  • 1)拿到所有的安装的应用程序的包信息
    public List<PackageInfo> getInfos(){
    List<PackageInfo> info=manager.getInstalledPackages(0);
    return info;}
  • 2)遍历包信息中数据
    for(PackageInfo info:getInfos()){
    String packname=info.packageName; 得到包名
    String appname=info.applicationInfo.loadLabel(manager).toString(); 得到应用的名字
    Drawable image=info.applicationInfo.loadIcon(manager); 得到应用的logo
    int flags=info.applicationInfo.flags; 得到应用的标志信息
  • 3)当满足下面的条件时就是获取了用户的应用程序,否则就是系统的应用程序
if((flags&info.applicationInfo.FLAG_SYSTEM)<=0)

&运算的用法

1)举个例子就好理解了,0010&1010的运算结果
0010
1010
--------(&)
0010
2)0xff二进制就是1111 1111

相关文章

网友评论

      本文标题:Android之获取应用程序信息

      本文链接:https://www.haomeiwen.com/subject/cxxbjttx.html