获取android手机里的所有应用,点击并响应

来源:互联网 发布:广州mac口红专柜地址 编辑:程序博客网 时间:2024/04/28 21:17
 在此我写一个找到android手机里的所有已装应用程序(android手机自带的也行),点击某个应用时,将做出响应 。

先看一下效果图:

 

当点击《愤怒的小鸟》时,将打开《愤怒的小鸟》这个游戏

main.xml的源代码如下:

view plaincopy to clipboardprint?
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:orientation="vertical"  
  4.     android:layout_width="fill_parent"  
  5.     android:layout_height="fill_parent"  
  6.     >  
  7.     <GridView xmlns:android="http://schemas.android.com/apk/res/android"  
  8.         android:id="@+id/gridview"  
  9.         android:layout_width="fill_parent"  
  10.         android:layout_height="fill_parent"  
  11.         android:numColumns="auto_fit"  
  12.         android:verticalSpacing="15dp"  
  13.         android:horizontalSpacing="12dp"  
  14.         android:columnWidth="95dp"  
  15.         android:stretchMode="columnWidth"  
  16.         android:gravity="center"  
  17.         />  
  18. </LinearLayout>  


 

接着是apps.xml,源代码如下:

 

view plaincopy to clipboardprint?
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"      
  3.     android:orientation="vertical"        
  4.     android:layout_width="fill_parent"      
  5.     android:layout_height="fill_parent"       
  6.     android:gravity="center" >  
  7.   
  8.     <ImageView  
  9.         android:id="@+id/apps_image"          
  10.         android:layout_width="48dip"       
  11.         android:layout_height="48dip"         
  12.         android:icon="@drawable/icon" />      
  13.   
  14.     <TextView          
  15.         android:id="@+id/apps_textview"       
  16.         android:layout_width="wrap_content"       
  17.         android:layout_height="wrap_content"          
  18.         android:maxLines="1"          
  19.         android:maxEms="5"        
  20.         android:text="good" />  
  21.   
  22. </LinearLayout>  

 

接下来就是java源代码了,比较长,希望耐心看下去

 

view plaincopy to clipboardprint?
  1. package com.android.game;  
  2.   
  3. import java.util.ArrayList;  
  4. import java.util.List;  
  5.   
  6. import android.app.Activity;  
  7. import android.content.Context;  
  8. import android.content.Intent;  
  9. import android.content.pm.PackageInfo;  
  10. import android.content.pm.PackageManager;  
  11. import android.graphics.drawable.Drawable;  
  12. import android.os.Bundle;  
  13. import android.view.LayoutInflater;  
  14. import android.view.View;  
  15. import android.view.ViewGroup;  
  16. import android.widget.AdapterView;  
  17. import android.widget.BaseAdapter;  
  18. import android.widget.GridView;  
  19. import android.widget.ImageView;  
  20. import android.widget.TextView;  
  21. import android.widget.AdapterView.OnItemClickListener;  
  22.   
  23. public class Apps extends Activity {  
  24.   
  25.     // 用来记录应用程序的信息   
  26.     List<AppsItemInfo> list;  
  27.   
  28.     private GridView gridview;  
  29.     private PackageManager pManager;  
  30.   
  31.     @Override  
  32.     protected void onCreate(Bundle savedInstanceState) {  
  33.         // TODO Auto-generated method stub  
  34.         super.onCreate(savedInstanceState);  
  35.         this.setContentView(R.layout.main);  
  36.   
  37.         // 取得gridview   
  38.         gridview = (GridView) findViewById(R.id.gridview);  
  39.   
  40.         // 获取图片、应用名、包名   
  41.         pManager = Apps.this.getPackageManager();  
  42.         List<PackageInfo> appList = getAllApps(Apps.this);  
  43.   
  44.         list = new ArrayList<AppsItemInfo>();  
  45.   
  46.         for (int i = 0; i < appList.size(); i++) {  
  47.             PackageInfo pinfo = appList.get(i);  
  48.             AppsItemInfo shareItem = new AppsItemInfo();  
  49.             // 设置图片   
  50.             shareItem.setIcon(pManager  
  51.                     .getApplicationIcon(pinfo.applicationInfo));  
  52.             // 设置应用程序名字   
  53.             shareItem.setLabel(pManager.getApplicationLabel(  
  54.                     pinfo.applicationInfo).toString());  
  55.             // 设置应用程序的包名   
  56.             shareItem.setPackageName(pinfo.applicationInfo.packageName);  
  57.   
  58.             list.add(shareItem);  
  59.   
  60.         }  
  61.   
  62.         // 设置gridview的Adapter   
  63.         gridview.setAdapter(new baseAdapter());  
  64.   
  65.         // 点击应用图标时,做出响应   
  66.         gridview.setOnItemClickListener(new ClickListener());  
  67.   
  68.     }  
  69.   
  70.     public static List<PackageInfo> getAllApps(Context context) {  
  71.   
  72.         List<PackageInfo> apps = new ArrayList<PackageInfo>();  
  73.         PackageManager pManager = context.getPackageManager();  
  74.         // 获取手机内所有应用   
  75.         List<PackageInfo> packlist = pManager.getInstalledPackages(0);  
  76.         for (int i = 0; i < packlist.size(); i++) {  
  77.             PackageInfo pak = (PackageInfo) packlist.get(i);  
  78.   
  79.             // 判断是否为非系统预装的应用程序  
  80.             // 这里还可以添加系统自带的,这里就先不添加了,如果有需要可以自己添加  
  81.             // if()里的值如果<=0则为自己装的程序,否则为系统工程自带  
  82.             if ((pak.applicationInfo.flags & pak.applicationInfo.FLAG_SYSTEM) <= 0) {  
  83.                 // 添加自己已经安装的应用程序  
  84.                 apps.add(pak);  
  85.             }  
  86.   
  87.         }  
  88.         return apps;  
  89.     }  
  90.   
  91.     private class baseAdapter extends BaseAdapter {  
  92.         LayoutInflater inflater = LayoutInflater.from(Apps.this);  
  93.   
  94.         @Override  
  95.         public int getCount() {  
  96.             // TODO Auto-generated method stub  
  97.             return list.size();  
  98.         }  
  99.   
  100.         @Override  
  101.         public Object getItem(int position) {  
  102.             // TODO Auto-generated method stub  
  103.             return null;  
  104.         }  
  105.   
  106.         @Override  
  107.         public long getItemId(int position) {  
  108.             // TODO Auto-generated method stub  
  109.             return position;  
  110.         }  
  111.   
  112.         @Override  
  113.         public View getView(int position, View convertView, ViewGroup parent) {  
  114.             // TODO Auto-generated method stub  
  115.             ViewHolder holder;  
  116.             if (convertView == null) {  
  117.                 // 使用View的对象itemView与R.layout.item关联  
  118.                 convertView = inflater.inflate(R.layout.apps, null);  
  119.                 holder = new ViewHolder();  
  120.                 holder.icon = (ImageView) convertView  
  121.                         .findViewById(R.id.apps_image);  
  122.                 holder.label = (TextView) convertView  
  123.                         .findViewById(R.id.apps_textview);  
  124.                 convertView.setTag(holder);  
  125.             } else {  
  126.                 holder = (ViewHolder) convertView.getTag();  
  127.             }  
  128.   
  129.             holder.icon.setImageDrawable(list.get(position).getIcon());  
  130.             holder.label.setText(list.get(position).getLabel().toString());  
  131.   
  132.             return convertView;  
  133.   
  134.         }  
  135.   
  136.     }  
  137.   
  138.     // 当用户点击应用程序图标时,将对这个类做出响应   
  139.     private class ClickListener implements OnItemClickListener {  
  140.   
  141.         @Override  
  142.         public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,  
  143.                 long arg3) {  
  144.   
  145.             // 将应用所选的应用程序信息共享到Application中  
  146.             MyApp appState = ((MyApp) getApplicationContext());  
  147.             // 获取当前所在选项卡   
  148.             String tab_id = appState.getTab_id();  
  149.             // 设置所选应用程序信息   
  150.             appState.set_AppInfo(tab_id, list.get(arg2).getLabel(), list.get(  
  151.                     arg2).getIcon(), list.get(arg2).getPackageName());        
  152.             Intent intent = new Intent(Apps.this, Game.class);  
  153.             startActivity(intent);  
  154.             // 销毁当前Activity   
  155.             finish();  
  156.         }  
  157.   
  158.     }  
  159.   
  160.     // 自定义一个 AppsItemInfo 类,用来存储应用程序的相关信息   
  161.     private class AppsItemInfo {  
  162.   
  163.         private Drawable icon; // 存放图片  
  164.         private String label; // 存放应用程序名  
  165.         private String packageName; // 存放应用程序包名  
  166.   
  167.         public Drawable getIcon() {  
  168.             return icon;  
  169.         }  
  170.   
  171.         public void setIcon(Drawable icon) {  
  172.             this.icon = icon;  
  173.         }  
  174.   
  175.         public String getLabel() {  
  176.             return label;  
  177.         }  
  178.   
  179.         public void setLabel(String label) {  
  180.             this.label = label;  
  181.         }  
  182.   
  183.         public String getPackageName() {  
  184.             return packageName;  
  185.         }  
  186.   
  187.         public void setPackageName(String packageName) {  
  188.             this.packageName = packageName;  
  189.         }  
  190.   
  191.     }  
  192.   
  193. }  
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 尿葡萄糖2个加怎么办 孕妇尿葡萄糖2加怎么办 尿的蛋白高怎么办治疗 孕妇尿蛋白高是怎么办 孕妇尿细菌数高怎么办 孕妇尿细菌很高怎么办 尿微量总蛋白高怎么办 衣服上碳素笔油怎么办 卡油泵总成坏了怎么办 汽车燃油泵坏了怎么办 新车汽油泵坏了怎么办 墓地的树枯死了怎么办 大车尿素不烧了怎么办 不烧尿素限扭怎么办 汽车首保过期了怎么办 假体隆鼻后透光怎么办 熊猫血有抗体了怎么办 rh阴性血怀二胎怎么办 熊猫血怀二胎了怎么办 rh阴性血要二胎怎么办 全血粘度都偏高怎么办 血脂高血粘度高怎么办 全血粘度值1偏高怎么办 全血粘度3偏高怎么办 血粘度高的症状怎么办 粉瘤感染化脓了怎么办 乌药剂量用大了怎么办 水卡消磁了怎么办妙招 电卡消磁了怎么办妙招 入园磁卡消磁了怎么办 透析中静脉压高怎么办 腰间盘突出压迫神经腿疼怎么办 肺热引起的发烧怎么办 肺热引起的痘痘怎么办 冰箱压条的霉点怎么办 白色的布鞋变黄怎么办 白鞋橡胶变黄了怎么办 肝功能检查总胆汁酸高怎么办 吃丹参滴丸尿血怎么办 胰酶消化过久怎么办 抗凝血酶活性低怎么办