Android 獲取所有安裝應用顯示在listview上

先看效果圖;


1350624056_9859.png


詳細看代碼;


  1. package com.taskmanage.file;  

  2. import java.util.ArrayList;  

  3. import java.util.Collections;  

  4. import java.util.HashMap;  

  5. import java.util.Iterator;  

  6. import java.util.List;  

  7. import java.util.Map;  

  8. import android.app.Activity;  

  9. import android.app.ProgressDialog;  

  10. import android.content.ComponentName;  

  11. import android.content.Context;  

  12. import android.content.Intent;  

  13. import android.content.pm.ApplicationInfo;  

  14. import android.content.pm.PackageManager;  

  15. import android.content.pm.ResolveInfo;  

  16. import android.graphics.drawable.Drawable;  

  17. import android.net.Uri;  

  18. import android.os.Build;  

  19. import android.os.Bundle;  

  20. import android.os.Handler;  

  21. import android.os.Message;  

  22. import android.provider.Settings;  

  23. import android.util.Log;  

  24. import android.view.LayoutInflater;  

  25. import android.view.View;  

  26. import android.view.ViewGroup;  

  27. import android.widget.AbsListView;  

  28. import android.widget.AdapterView;  

  29. import android.widget.AbsListView.OnScrollListener;  

  30. import android.widget.AdapterView.OnItemClickListener;  

  31. import android.widget.BaseAdapter;  

  32. import android.widget.ImageView;  

  33. import android.widget.ListView;  

  34. import android.widget.SimpleAdapter;  

  35. import android.widget.TextView;  

  36. publicclass SoftActivity extends Activity implements Runnable ,OnItemClickListener{  

  37. privatestaticfinal String SCHEME = "package";  

  38. privatestaticfinal String APP_PKG_NAME_21 = "com.android.settings.ApplicationPkgName";  

  39. privatestaticfinal String APP_PKG_NAME_22 = "pkg";  

  40. privatestaticfinal String APP_DETAILS_PACKAGE_NAME = "com.android.settings";  

  41. privatestaticfinal String APP_DETAILS_CLASS_NAME = "com.android.settings.InstalledAppDetails";  

  42. private List<Map<String, Object>> list = null;  

  43. private ListView softlist = null;  

  44. private ProgressDialog pd;  

  45. private Context mContext;  

  46. private PackageManager mPackageManager;  

  47. private List<ResolveInfo> mAllApps;  

  48. @Override

  49. protectedvoid onCreate(Bundle savedInstanceState) {  

  50.        setContentView(R.layout.software);  

  51.        setTitle("文件管理器");  

  52.        mContext = this;  

  53.        mPackageManager = getPackageManager();  

  54.        softlist = (ListView) findViewById(R.id.softlist);  

  55.         pd = ProgressDialog.show(this, "請稍候..", "正在收集軟件信息...", true,false);  

  56.         Thread thread = new Thread(this);  

  57.         thread.start();  

  58. super.onCreate(savedInstanceState);  

  59.    }  

  60. /**

  61.     * 檢查系統應用程序,添加到應用列表中

  62.     */

  63. privatevoid bindMsg(){  

  64. //應用過濾條件

  65.        Intent mainIntent = new Intent(Intent.ACTION_MAIN, null);  

  66.        mainIntent.addCategory(Intent.CATEGORY_LAUNCHER);  

  67.        mAllApps = mPackageManager.queryIntentActivities(mainIntent, 0);  

  68.        softlist.setAdapter(new MyAdapter(mContext, mAllApps));  

  69.        softlist.setOnItemClickListener(this);  

  70. //按報名排序

  71.        Collections.sort(mAllApps, new ResolveInfo.DisplayNameComparator(mPackageManager));  

  72.    }  

  73. @Override

  74. publicvoid run() {  

  75.        bindMsg();  

  76.        handler.sendEmptyMessage(0);  

  77.    }  

  78. private Handler handler = new Handler() {  

  79. publicvoid handleMessage(Message msg) {  

  80.            pd.dismiss();  

  81.        }  

  82.    };  

  83. class MyAdapter extends BaseAdapter{  

  84. private Context context;  

  85. private List<ResolveInfo> resInfo;  

  86. private ImageView app_icon=null;  

  87. private TextView app_tilte=null,app_des=null;  

  88. private ResolveInfo res;  

  89. private LayoutInflater infater=null;    

  90. public MyAdapter(Context context, List<ResolveInfo> resInfo) {              

  91. this.context = context;  

  92. this.resInfo = resInfo;  

  93.             infater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);  

  94.        }  

  95. @Override

  96. publicint getCount() {  

  97. return resInfo.size();  

  98.        }  

  99. @Override

  100. public Object getItem(int arg0) {  

  101. return arg0;  

  102.        }  

  103. @Override

  104. publiclong getItemId(int position) {  

  105. return position;  

  106.        }  

  107. @Override

  108. public View getView(int position, View convertView, ViewGroup parent) {  

  109. //  View view = null;  

  110.            ViewHolder holder = null;    

  111. if (convertView == null || convertView.getTag() == null) {    

  112.                convertView = infater.inflate(R.layout.soft_row, null);    

  113.                holder = new ViewHolder(convertView);    

  114.                convertView.setTag(holder);    

  115.            }    

  116. else{    

  117. //     view = convertView ;  

  118.                holder = (ViewHolder) convertView.getTag() ;    

  119.            }    

  120. //獲取應用程序包名,程序名稱,程序圖標

  121.            res = resInfo.get(position);  

  122.            holder.appIcon.setImageDrawable(res.loadIcon(mPackageManager));    

  123.            holder.tvAppLabel.setText(res.loadLabel(mPackageManager).toString());  

  124.            holder.tvPkgName.setText(res.activityInfo.packageName+'\n'+res.activityInfo.name);  

  125. return convertView;  

  126. /*convertView = LayoutInflater.from(context).inflate(R.layout.soft_row, null);

  127.            app_icon = (ImageView)convertView.findViewById(R.id.img);

  128.            app_tilte = (TextView)convertView.findViewById(R.id.name);

  129.            app_des = (TextView)convertView.findViewById(R.id.desc);

  130.            res = resInfo.get(position);

  131.            app_icon.setImageDrawable(res.loadIcon(mPackageManager));

  132.            app_tilte.setText(res.loadLabel(mPackageManager).toString());

  133.            app_des.setText(res.activityInfo.packageName+'\n'+res.activityInfo.name);

  134.            return convertView;*/

  135.        }  

  136.    }  

  137. //設定界面佈局

  138. class ViewHolder {    

  139.        ImageView appIcon;    

  140.        TextView tvAppLabel;    

  141.        TextView tvPkgName;    

  142. public ViewHolder(View view) {    

  143. this.appIcon = (ImageView) view.findViewById(R.id.img);    

  144. this.tvAppLabel = (TextView) view.findViewById(R.id.name);    

  145. this.tvPkgName = (TextView) view.findViewById(R.id.desc);    

  146.        }    

  147.    }    

  148. /**

  149.     * 單擊應用程序後進入系統應用管理界面

  150.     */

  151. @Override

  152. publicvoid onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) {  

  153.        ResolveInfo res = mAllApps.get(position);  

  154.        String pkg=res.activityInfo.packageName;  

  155.        Intent intent = new Intent();  

  156. finalint apiLevel = Build.VERSION.SDK_INT;  

  157. if (apiLevel >= 9) {//2.2版本後

  158.            intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);    

  159.            Uri uri = Uri.fromParts(SCHEME, pkg, null);    

  160.            intent.setData(uri);    

  161.        }else{//2.2之前

  162. final String appPkgName = (apiLevel == 8 ? APP_PKG_NAME_22    

  163.                    : APP_PKG_NAME_21);    

  164.            intent.setAction(Intent.ACTION_VIEW);    

  165.            intent.setClassName(APP_DETAILS_PACKAGE_NAME,    

  166.                    APP_DETAILS_CLASS_NAME);    

  167.            intent.putExtra(appPkgName, pkg);  

  168.        }  

  169.        startActivity(intent);  

  170.    }  

  171. }  


software.xml佈局;



  1. <?xml version="1.0" encoding="utf-8"?>  

  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

  3.    android:orientation="vertical" android:layout_width="fill_parent"

  4.    android:layout_height="fill_parent">  

  5.    <ListView  

  6.        android:layout_width="fill_parent"

  7.        android:layout_height="fill_parent"

  8.        android:drawSelectorOnTop="false"

  9.        android:id="@+id/softlist" />  

  10. </LinearLayout>  


soft_row.xml佈局;



  1. <?xml version="1.0" encoding="utf-8"?>  

  2. <LinearLayout  

  3.    xmlns:android="http://schemas.android.com/apk/res/android"

  4.    android:id="@+id/vw1"

  5.    android:layout_width="fill_parent"

  6.    android:layout_height="wrap_content"

  7.    android:orientation="horizontal">      

  8.    <ImageView android:id="@+id/img"

  9.        android:layout_width="32dip"

  10.        android:layout_margin="4dip"

  11.        android:layout_height="32dip"/>  

  12.   <LinearLayout  

  13.        android:layout_width="wrap_content"

  14.        android:layout_height="wrap_content"

  15.        android:orientation="vertical">  

  16.        <TextView android:id="@+id/name"

  17.            android:textSize="18sp"

  18.            android:textStyle="bold"

  19.            android:layout_width="fill_parent"

  20.            android:layout_height="wrap_content"/>  

  21.        <TextView android:id="@+id/desc"

  22.            android:textSize="14sp"

  23.            android:layout_width="fill_parent"

  24.            android:paddingLeft="10dip"

  25.            android:layout_height="wrap_content"/>  

  26.    </LinearLayout>  

  27. </LinearLayout>  


最後別忘了加權限;


  1. <uses-permissionandroid:name="android.permission.READ_PHONE_STATE"/>

  2. <uses-permissionandroid:name="android.permission.GET_TASKS"/>


【轉】http://blog.csdn.net/yudajun/article/details/7956933

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章