美文网首页
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