• 读取手机上所有应用程序并显示(APP)


    
    
    pd = ProgressDialog.show(getActivity(), "请稍候..", "正在收集软件信息...", true,false);  
                    Thread thread = new Thread(this);  
                    thread.start(); 
    
    
    
     @Override
     public void run() {
      
             if(mlistAppInfo==null){
                 mlistAppInfo = new ArrayList<AppInfo>();  
                 queryAppInfo();
           }
           
             handler.sendEmptyMessage(0); 
      
     }  
      private Handler handler = new Handler() {  
             public void handleMessage(Message msg) {  
                if(mlistAppInfo!=null&&mlistAppInfo.size()==1)
                   {
                    Intent intent = mlistAppInfo.get(0).getIntent();  
                       startActivity(intent); 
                   }
                   else if(mlistAppInfo!=null&&mlistAppInfo.size()>1){
                View appView=LayoutInflater.from(getActivity()).inflate(R.layout.yue_list_new, null);
                listview = (ListView) appView.findViewById(R.id.listview);  
                
                   BrowseApplicationInfoAdapter browseAppAdapter = new BrowseApplicationInfoAdapter(  
                           getActivity(), mlistAppInfo);  
                   listview.setAdapter(browseAppAdapter);  
                   listview.setOnItemClickListener(LvxingbaoFragment.this);  
                 
                   new AlertDialog.Builder(getActivity()).setView(appView).show();
                   }
                 pd.dismiss();  
             }  
         }; 
    
    public void queryAppInfo() {  
            PackageManager pm = getActivity().getPackageManager(); // 获得PackageManager对象  
            Intent mainIntent = new Intent(Intent.ACTION_MAIN, null);  
            mainIntent.addCategory(Intent.CATEGORY_LAUNCHER);  
            // 通过查询,获得所有ResolveInfo对象.  
            List<ResolveInfo> resolveInfos = pm  
                    .queryIntentActivities(mainIntent, 0);  
            // 调用系统排序 , 根据name排序  
            // 该排序很重要,否则只能显示系统应用,而不能列出第三方应用程序  
            Collections.sort(resolveInfos,new ResolveInfo.DisplayNameComparator(pm));  
            if (mlistAppInfo != null) {  
                mlistAppInfo.clear();  
                for (ResolveInfo reInfo : resolveInfos) {  
                 
                 String appLabel = (String) reInfo.loadLabel(pm);
                 
                 
                   String activityName = reInfo.activityInfo.name;
                   String pkgName = reInfo.activityInfo.packageName; // 获得应用程序的包名  
                           // String appLabel = (String) reInfo.loadLabel(pm); // 获得应用程序的Label  
                            Drawable icon = reInfo.loadIcon(pm); // 获得应用程序图标  
                            // 为应用程序的启动Activity 准备Intent  
                            Intent launchIntent = new Intent();  
                            launchIntent.setComponent(new ComponentName(pkgName,  
                                    activityName));  
                            
                            // 创建一个AppInfo对象,并赋值  
                            AppInfo appInfo = new AppInfo();  
                            appInfo.setAppLabel(appLabel);  
                            appInfo.setPkgName(pkgName);  
                            appInfo.setAppIcon(icon);  
                            appInfo.setIntent(launchIntent);  
                           
                            mlistAppInfo.add(appInfo); // 添加至列表中  
                 
                   // String activityName = reInfo.activityInfo.name; // 获得该应用程序的启动Activity的name  
                    
    //                System.out.println(appLabel + " activityName---" + activityName  
    //                        + " pkgName---" + pkgName);  
                }  
            } 
        }
    
     
    
     
    
    class BrowseApplicationInfoAdapter extends BaseAdapter {  
            
            private List<AppInfo> mlistAppInfo = null;  
              
            LayoutInflater infater = null;  
              
            public BrowseApplicationInfoAdapter(Context context,  List<AppInfo> apps) {  
                infater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);  
                mlistAppInfo = apps ;  
            }  
            @Override  
            public int getCount() {  
                // TODO Auto-generated method stub  
                System.out.println("size" + mlistAppInfo.size());  
                return mlistAppInfo.size();  
            }  
            @Override  
            public Object getItem(int position) {  
                // TODO Auto-generated method stub  
                return mlistAppInfo.get(position);  
            }  
            @Override  
            public long getItemId(int position) {  
                // TODO Auto-generated method stub  
                return 0;  
            }  
            @Override  
            public View getView(int position, View convertview, ViewGroup arg2) {  
                System.out.println("getView at " + position);  
                View view = null;  
                ViewHolder holder = null;  
                if (convertview == null || convertview.getTag() == null) {  
                    view = infater.inflate(R.layout.item_add_score, null);  
                    holder = new ViewHolder(view);  
                    view.setTag(holder);  
                }   
                else{  
                    view = convertview ;  
                    holder = (ViewHolder) convertview.getTag() ;  
                }  
                AppInfo appInfo = (AppInfo) getItem(position);  
                holder.appIcon.setImageDrawable(appInfo.getAppIcon());  
                holder.tvAppLabel.setText(appInfo.getAppLabel());  
                //holder.tvPkgName.setText(appInfo.getPkgName());  
                return view;  
            }  
          
            
        }  
        class ViewHolder {  
            ImageView appIcon;  
            TextView tvAppLabel;  
            //TextView tvPkgName;  
      
            public ViewHolder(View view) {  
                this.appIcon = (ImageView) view.findViewById(R.id.add_score_app_img);  
                this.tvAppLabel = (TextView) view.findViewById(R.id.add_score_app_name);  
               // this.tvPkgName = (TextView) view.findViewById(R.id.tvPkgName);  
            }  
        }
        
        class AppInfo {  
            
            private String appLabel;    //应用程序标签  
            private Drawable appIcon ;  //应用程序图像  
            private Intent intent ;     //启动应用程序的Intent ,一般是Action为Main和Category为Lancher的Activity  
            private String pkgName ;    //应用程序所对应的包名  
              
            public AppInfo(){}  
              
            public String getAppLabel() {  
                return appLabel;  
            }  
            public void setAppLabel(String appName) {  
                this.appLabel = appName;  
            }  
            public Drawable getAppIcon() {  
                return appIcon;  
            }  
            public void setAppIcon(Drawable appIcon) {  
                this.appIcon = appIcon;  
            }  
            public Intent getIntent() {  
                return intent;  
            }  
            public void setIntent(Intent intent) {  
                this.intent = intent;  
            }  
            public String getPkgName(){  
                return pkgName ;  
            }  
            public void setPkgName(String pkgName){  
                this.pkgName=pkgName ;  
            }  
        }
  • 相关阅读:
    win7 下加载MSCOMCTL.OCX
    getGLES1ExtensionString: Could not find GLES 1.x config!
    IUnknown(TVarData(Params[0]).VPointer) as Range
    win8 VB6打开提示MSCOMCTL.ocx未注册
    服务端接口处理流任务要如何返回?
    flink之kafka生产和消费实战-将生产数据存放到mongodb中
    初识doris的那些基本概念
    bash常见用法
    sonar p3c规则配置
    sonar之gitlab ci 在gradle项目的实践(汉化、branch、 commit提交评论)
  • 原文地址:https://www.cnblogs.com/lx0551/p/3571625.html
Copyright © 2020-2023  润新知