获取手机应用listview显示

1、新建app_manager.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="55dip"
        android:background="#ff11caee"
        android:gravity="center_vertical|center_horizontal"
        android:orientation="vertical" >

        <TextView
            android:id="@+id/tv_app_manager_title"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="所有程序"
            android:textColor="@android:color/white"
            android:textSize="25sp" />
    </LinearLayout>

    <FrameLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent" >

        <ListView
            android:id="@+id/lv_app_manager"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_marginTop="1dip"
           >
        </ListView>

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_gravity="center_vertical|center_horizontal" 
            android:orientation="vertical"
             android:visibility="invisible" 
                 android:id="@+id/ll_app_loading">
            <ProgressBar 
                android:id="@+id/pb_app_manager"
            android:layout_width="60dip"
            android:layout_height="60dip" 
                />

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="正在加载应用程序"
                android:textColor="@android:color/white" />

        </LinearLayout>
    </FrameLayout>

</LinearLayout>

2、新建AppManagerActivity


public class AppManagerActivity extends Activity implements OnClickListener {
    protected static final int GET_ALL_APP_FINISHI = 80;
    private ListView lv_app_manager;
    private LinearLayout ll_app_loading;
    private AppInfoProvider provider;
    private List<AppInfo> appinfos;
    private AppManagerAdapter adapter;
    private PopupWindow localPopupWindow;
    private String TAG = "AppManagerActivity";
    private Handler handler = new Handler() {

        @Override
        public void handleMessage(Message msg) {
            // TODO Auto-generated method stub
            super.handleMessage(msg);
            switch (msg.what) {
            case GET_ALL_APP_FINISHI:
                ll_app_loading.setVisibility(View.INVISIBLE);
                // 把数据设置给listview的数组适配器
                adapter = new AppManagerAdapter(appinfos,
                        AppManagerActivity.this);
                lv_app_manager.setAdapter(adapter);

                break;

            }
        }

    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.app_manager);
        lv_app_manager = (ListView) findViewById(R.id.lv_app_manager);
        ll_app_loading = (LinearLayout) findViewById(R.id.ll_app_loading);

        ll_app_loading.setVisibility(View.VISIBLE);
        new Thread() {
            public void run() {
                provider = new AppInfoProvider(AppManagerActivity.this);
                appinfos = provider.getAllApps();
                Message msg = new Message();
                msg.what = GET_ALL_APP_FINISHI;
                handler.sendMessage(msg);

            };
        }.start();

        lv_app_manager.setOnItemClickListener(new OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> parent, View view,
                    int position, long id) {
                dismissPopupWindow();
                // 获取当前view对象在窗体中的位置
                int[] arrayOfInt = new int[2];
                view.getLocationInWindow(arrayOfInt);

                int i = arrayOfInt[0] + 60;
                int j = arrayOfInt[1];

                AppInfo info = (AppInfo) lv_app_manager
                        .getItemAtPosition(position);
                String packname = info.getPackname();
                 TextView tv=new TextView(AppManagerActivity.this);
                 tv.setTextSize(20);
                 tv.setTextColor(Color.RED);
                 tv.setText(packname);

                localPopupWindow = new PopupWindow(popupView, 230, 70);
                // 一定要给popup设置背景颜色
                Drawable background = new ColorDrawable(Color.TRANSPARENT);
                // Drawable background =
                // getResources().getDrawable(R.drawable.local_popup_bg);
                localPopupWindow.setBackgroundDrawable(background);
                localPopupWindow.showAtLocation(view, Gravity.LEFT
                        | Gravity.TOP, i, j);
                ll.startAnimation(sa);
            }
        });

        lv_app_manager.setOnScrollListener(new OnScrollListener() {

            @Override
            public void onScrollStateChanged(AbsListView view, int scrollState) {
                dismissPopupWindow();
            }

            @Override
            public void onScroll(AbsListView view, int firstVisibleItem,
                    int visibleItemCount, int totalItemCount) {
                dismissPopupWindow();
            }
        });
    }

    private void dismissPopupWindow() {
        if (localPopupWindow != null) {
            localPopupWindow.dismiss();
            localPopupWindow = null;
        }
    }


    }

}

3、angine中方法AppInfoProvider


public class AppInfoProvider {
    private Context context;
    private PackageManager packageManager;
    private String TAG="AppInfoProvider";

public AppInfoProvider(Context context) {
        this.context = context;
        packageManager=context.getPackageManager();
    }


//  返回当前手机里面所有手机应用程序
 public List<AppInfo> getAllApps(){
     List<AppInfo> appInfos=new ArrayList<AppInfo>();

     List<PackageInfo> packageInfos= packageManager.getInstalledPackages(PackageManager.GET_UNINSTALLED_PACKAGES);
     for (PackageInfo info: packageInfos) {//增强的for循环来遍历
         AppInfo myApp=new AppInfo();
        String packageName=info.packageName;//a
        myApp.setPackname(packageName);
        Log.i(TAG, "packname"+packageName);
        ApplicationInfo appinfo=info.applicationInfo;//a
        Drawable icon=appinfo.loadIcon(packageManager);//a
        myApp.setIcon(icon);
        String appname=appinfo.loadLabel(packageManager).toString();//a
        myApp.setAppname(appname);
        Log.i(TAG, "appname"+appname);
        if (filterApp(appinfo)) {
            Log.i(TAG, "用户应用");
            myApp.setSystemApp(false);
        }else {
            Log.i(TAG, "系统应用");
            myApp.setSystemApp(true);
        }
        appInfos.add(myApp);
    }

    return appInfos;

 }
// 判断某个应用程序是不是三方的应用程序

 public boolean filterApp(ApplicationInfo info){
     if ((info.flags & ApplicationInfo.FLAG_UPDATED_SYSTEM_APP)!=0) {
         return true;
    }else if ((info.flags & ApplicationInfo.FLAG_SYSTEM)==0) {
         return true;
    }
    return false;

 }
}

4、domain实体AppInfo


public class AppInfo {
private Drawable icon;
private String appname;
private String packname;
private boolean isSystemApp;
public Drawable getIcon() {
    return icon;
}
public void setIcon(Drawable icon) {
    this.icon = icon;
}
public String getAppname() {
    return appname;
}
public void setAppname(String appname) {
    this.appname = appname;
}
public String getPackname() {
    return packname;
}
public void setPackname(String packname) {
    this.packname = packname;
}
public boolean isSystemApp() {
    return isSystemApp;
}
public void setSystemApp(boolean isSystemApp) {
    this.isSystemApp = isSystemApp;
}


}

5、Adapter 中AppManagerAdapter


public class AppManagerAdapter extends BaseAdapter {
    private List<AppInfo> appinfos;
    private static ImageView iv;
    private static TextView tv;
    private Context context;
    private String TAG="AppManagerAdapter";


    public AppManagerAdapter(List<AppInfo> appinfos, Context context) {
        this.appinfos = appinfos;
        this.context = context;
    }

    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        return appinfos.size();
    }

    @Override
    public Object getItem(int position) {
        // TODO Auto-generated method stub
        return appinfos.get(position);
    }

    @Override
    public long getItemId(int position) {
        // TODO Auto-generated method stub
        return position;
    }

    // 转化view对象 convertView
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        AppInfo info = appinfos.get(position);
        View view;
        if (convertView == null) {
            Log.i(TAG, "通过资源");
            view = View.inflate(context, R.layout.app_item, null);
        } else {
            Log.i(TAG, "使用历史缓存view对象");
            view = convertView;
        }

        iv = (ImageView) view.findViewById(R.id.iv_icon);
        tv = (TextView) view.findViewById(R.id.tv_app_name);
        iv.setImageDrawable(info.getIcon());
        tv.setText(info.getAppname());

        return view;
    }

}

6、app_item.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="fill_parent"
    android:layout_height="65dip"
    android:background="#000000"
    android:orientation="horizontal"
    android:gravity="center_vertical"
>

    <ImageView
        android:id="@+id/iv_icon"
        android:layout_width="40dip"
        android:layout_height="40dip"
        android:scaleType="fitXY"
        android:src="@drawable/ic_launcher" >
    </ImageView>

    <TextView
        android:id="@+id/tv_app_name"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:maxLines="4"
        android:singleLine="true"
        android:text="功能名字"
        android:textSize="17sp" 
        android:layout_marginLeft="5dip"
        android:textColor="#ffffff">
    </TextView>

</LinearLayout>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值