有時需對已安裝的應用進行管理 缠局, 這里我簡單的寫了獲取應用程序列表祸穷。
代碼如下:
package com.lml.applicationtest;
import java.util.List;
import android.app.Activity;
import android.content.Context;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Matrix;
import android.graphics.PixelFormat;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
public class MainActivity extends Activity {
private ListView lv;
private List pakageinfos;
private PackageManager pm;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
lv = (ListView) findViewById(R.id.list);
makeList();
}
private void makeList() {
pm = getPackageManager();
pakageinfos = pm.getInstalledPackages(PackageManager.GET_UNINSTALLED_PACKAGES);
lv.setAdapter(new MyAdapter(this));
}
private class MyAdapter extends BaseAdapter {
private Context context;// 用于接收傳遞過來的Context對象
public MyAdapter(Context context) {
this.context = context;
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return pakageinfos.size();
}
@Override
public Object getItem(int arg0) {
// TODO Auto-generated method stub
return arg0;
}
@Override
public long getItemId(int arg0) {
// TODO Auto-generated method stub
return arg0;
}
@Override
public View getView(int arg0, View arg1, ViewGroup arg2) {
// TODO Auto-generated method stub
PackageInfo info = pakageinfos.get(arg0);
View view = View.inflate(context, R.layout.item, null);
Drawable drawable=info.applicationInfo.loadIcon(pm);
((ImageView) view.findViewById(R.id.iv)).setImageDrawable(zoomDrawable(drawable,50,50));
((TextView) view.findViewById(R.id.tv)).setText(info.applicationInfo.loadLabel(pm));
return view;
}
}
private Bitmap drawableToBitmap(Drawable drawable)// drawable 轉換成bitmap
{
int width = drawable.getIntrinsicWidth(); // 取drawable的長寬
int height = drawable.getIntrinsicHeight();
Bitmap.Config config = drawable.getOpacity() != PixelFormat.OPAQUE ? Bitmap.Config.ARGB_8888
: Bitmap.Config.RGB_565; // 取drawable的顏色格式
Bitmap bitmap = Bitmap.createBitmap(width, height, config); // 建立對應bitmap
Canvas canvas = new Canvas(bitmap); // 建立對應bitmap的畫布
drawable.setBounds(0, 0, width, height);
drawable.draw(canvas); // 把drawable內容畫到畫布中
return bitmap;
}
private Drawable zoomDrawable(Drawable drawable, int w, int h)
{
int width = drawable.getIntrinsicWidth();
int height= drawable.getIntrinsicHeight();
Bitmap oldbmp = drawableToBitmap(drawable);// drawable轉換成bitmap
Matrix matrix = new Matrix();?? // 創(chuàng)建操作圖片用的Matrix對象
float scaleWidth = ((float)w / width);?? // 計算縮放比例
float scaleHeight = ((float)h / height);
matrix.postScale(scaleWidth, scaleHeight);???????? // 設置縮放比例
Bitmap newbmp = Bitmap.createBitmap(oldbmp, 0, 0, width, height, matrix, true);?????? // 建立新的bitmap屹耐,其內容是對原bitmap的縮放后的圖
return new BitmapDrawable(getResources() ,newbmp);?????? // 把bitmap轉換成drawable并返回
}
}