android 获取应用列表 点击打开应用

main.xml源码:用gridview控件显示每个应用图标及名称

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

apps.xml源码:每个gridview item里面的内容
<?xml version="1.0" encoding="utf-8"?>    


activity中的源码

package com.android.getApps;import java.util.ArrayList;import java.util.List;import android.app.Activity;import android.content.Context;import android.content.Intent;import android.content.pm.PackageInfo;import android.content.pm.PackageManager;import android.graphics.drawable.Drawable;import android.os.Bundle;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.AdapterView;import android.widget.AdapterView.OnItemClickListener;import android.widget.BaseAdapter;import android.widget.GridView;import android.widget.ImageView;import android.widget.TextView;public class Apps extends Activity {// 用来记录应用程序的信息List list;private GridView gridview;private PackageManager pManager;@Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);this.setContentView(R.layout.main);// 取得gridviewgridview = (GridView) findViewById(R.id.gridview);// 获取图片、应用名、包名pManager = Apps.this.getPackageManager();List appList = getAllApps(Apps.this);list = new ArrayList();for (int i = 0; i < appList.size(); i++) {PackageInfo pinfo = appList.get(i);AppsItemInfo shareItem = new AppsItemInfo();// 设置图片shareItem.setIcon(pManager.getApplicationIcon(pinfo.applicationInfo));// 设置应用程序名字shareItem.setLabel(pManager.getApplicationLabel(pinfo.applicationInfo).toString());// 设置应用程序的包名shareItem.setPackageName(pinfo.applicationInfo.packageName);list.add(shareItem);}// 设置gridview的Adaptergridview.setAdapter(new baseAdapter());// 点击应用图标时,做出响应gridview.setOnItemClickListener(new ClickListener());}public static List getAllApps(Context context) {List apps = new ArrayList();PackageManager pManager = context.getPackageManager();// 获取手机内所有应用List packlist = pManager.getInstalledPackages(0);for (int i = 0; i < packlist.size(); i++) {PackageInfo pak = (PackageInfo) packlist.get(i);// 判断是否为非系统预装的应用程序// 这里还可以添加系统自带的,这里就先不添加了,如果有需要可以自己添加// if()里的值如果<=0则为自己装的程序,否则为系统工程自带if ((pak.applicationInfo.flags & pak.applicationInfo.FLAG_SYSTEM) <= 0) {// 添加自己已经安装的应用程序apps.add(pak);}}return apps;}private class baseAdapter extends BaseAdapter {LayoutInflater inflater = LayoutInflater.from(Apps.this);@Overridepublic int getCount() {// TODO Auto-generated method stubreturn list.size();}@Overridepublic Object getItem(int position) {// TODO Auto-generated method stubreturn null;}@Overridepublic long getItemId(int position) {// TODO Auto-generated method stubreturn position;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {// TODO Auto-generated method stubViewHolder holder;if (convertView == null) {// 使用View的对象itemView与R.layout.item关联convertView = inflater.inflate(R.layout.apps, null);holder = new ViewHolder();holder.icon = (ImageView) convertView.findViewById(R.id.apps_image);holder.label = (TextView) convertView.findViewById(R.id.apps_textview);convertView.setTag(holder);} else {holder = (ViewHolder) convertView.getTag();}holder.icon.setImageDrawable(list.get(position).getIcon());holder.label.setText(list.get(position).getLabel().toString());return convertView;}}private class ViewHolder{private ImageView icon;private TextView label;}// 当用户点击应用程序图标时,将对这个类做出响应private class ClickListener implements OnItemClickListener {@Overridepublic void onItemClick(AdapterView<?> arg0, View arg1, int arg2,long arg3) {//// 将应用所选的应用程序信息共享到Application中//MyApp appState = ((MyApp) getApplicationContext());//// 获取当前所在选项卡//String tab_id = appState.getTab_id();//// 设置所选应用程序信息//appState.set_AppInfo(tab_id, list.get(arg2).getLabel(), list.get(//arg2).getIcon(), list.get(arg2).getPackageName());Intent intent = new Intent();intent = Apps.this.getPackageManager().getLaunchIntentForPackage(list.get(arg2).getPackageName());startActivity(intent);// 销毁当前Activity//finish();}}// 自定义一个 AppsItemInfo 类,用来存储应用程序的相关信息private class AppsItemInfo {private Drawable icon; // 存放图片private String label; // 存放应用程序名private String packageName; // 存放应用程序包名public Drawable getIcon() {return icon;}public void setIcon(Drawable icon) {this.icon = icon;}public String getLabel() {return label;}public void setLabel(String label) {this.label = label;}public String getPackageName() {return packageName;}public void setPackageName(String packageName) {this.packageName = packageName;}}}
最终的效果



更多相关文章

  1. 搭建android测试环境
  2. Android(安卓)各种布局技术-五大布局对象
  3. android中SharedPreferences和PreferenceActivity的存取数据
  4. Listview
  5. android实现开机欢迎界面
  6. Android自动横屏注意事项
  7. Android(安卓)Toolbar
  8. 解决CardView无点击效果 实现水波纹效果
  9. Android(安卓)ScrollView 判断到顶到底,和设置到顶到底

随机推荐

  1. Android(安卓)自定义数字键盘(一)
  2. 【构建Android缓存模块】(一)吐槽与原理分
  3. Android(安卓)nomedia 避免图片等资源泄
  4. windows下cygwin使用ndkr8编译ffmpeg
  5. 给android设备增加串口功能
  6. Android中进行图像压缩和缩放
  7. Android涔媋ndroid:layout_weight璇﹁В
  8. android 混淆规则详解
  9. Android初涉及之Android(安卓)Studio&JAV
  10. git下载Android源代码(含kernel)(zz)