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

简介:
  在此我写一个找到android手机里的所有已装应用程序(android手机自带的也行),点击某个应用时,将做出响应 。

先看一下效果图:

 

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

main.xml的源代码如下:

  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,源代码如下:

 

  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源代码了,比较长,希望耐心看下去

 

  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月前
|
开发框架 前端开发 Android开发
Flutter 与原生模块(Android 和 iOS)之间的通信机制,包括方法调用、事件传递等,分析了通信的必要性、主要方式、数据传递、性能优化及错误处理,并通过实际案例展示了其应用效果,展望了未来的发展趋势
本文深入探讨了 Flutter 与原生模块(Android 和 iOS)之间的通信机制,包括方法调用、事件传递等,分析了通信的必要性、主要方式、数据传递、性能优化及错误处理,并通过实际案例展示了其应用效果,展望了未来的发展趋势。这对于实现高效的跨平台移动应用开发具有重要指导意义。
183 4
|
25天前
|
JSON Java API
探索安卓开发:打造你的首个天气应用
在这篇技术指南中,我们将一起潜入安卓开发的海洋,学习如何从零开始构建一个简单的天气应用。通过这个实践项目,你将掌握安卓开发的核心概念、界面设计、网络编程以及数据解析等技能。无论你是初学者还是有一定基础的开发者,这篇文章都将为你提供一个清晰的路线图和实用的代码示例,帮助你在安卓开发的道路上迈出坚实的一步。让我们一起开始这段旅程,打造属于你自己的第一个安卓应用吧!
54 14
|
28天前
|
Java Linux 数据库
探索安卓开发:打造你的第一款应用
在数字时代的浪潮中,每个人都有机会成为创意的实现者。本文将带你走进安卓开发的奇妙世界,通过浅显易懂的语言和实际代码示例,引导你从零开始构建自己的第一款安卓应用。无论你是编程新手还是希望拓展技术的开发者,这篇文章都将为你打开一扇门,让你的创意和技术一起飞扬。
|
26天前
|
搜索推荐 前端开发 测试技术
打造个性化安卓应用:从设计到开发的全面指南
在这个数字时代,拥有一个定制的移动应用不仅是一种趋势,更是个人或企业品牌的重要延伸。本文将引导你通过一系列简单易懂的步骤,从构思你的应用理念开始,直至实现一个功能齐全的安卓应用。无论你是编程新手还是希望拓展技能的开发者,这篇文章都将为你提供必要的工具和知识,帮助你将创意转化为现实。
|
2月前
|
Android开发 数据安全/隐私保护 虚拟化
安卓手机远程连接登录Windows服务器教程
安卓手机远程连接登录Windows服务器教程
112 4
|
26天前
|
Java Android开发 开发者
探索安卓开发:构建你的第一个“Hello World”应用
在安卓开发的浩瀚海洋中,每个新手都渴望扬帆起航。本文将作为你的指南针,引领你通过创建一个简单的“Hello World”应用,迈出安卓开发的第一步。我们将一起搭建开发环境、了解基本概念,并编写第一行代码。就像印度圣雄甘地所说:“你必须成为你希望在世界上看到的改变。”让我们一起开始这段旅程,成为我们想要见到的开发者吧!
35 0
|
2月前
|
JSON Java Android开发
探索安卓开发之旅:打造你的第一个天气应用
【10月更文挑战第30天】在这个数字时代,掌握移动应用开发技能无疑是进入IT行业的敲门砖。本文将引导你开启安卓开发的奇妙之旅,通过构建一个简易的天气应用来实践你的编程技能。无论你是初学者还是有一定经验的开发者,这篇文章都将成为你宝贵的学习资源。我们将一步步地深入到安卓开发的世界中,从搭建开发环境到实现核心功能,每个环节都充满了发现和创造的乐趣。让我们开始吧,一起在代码的海洋中航行!
|
2月前
|
存储 搜索推荐 Java
打造个性化安卓应用:从设计到实现
【10月更文挑战第30天】在数字化时代,拥有一个个性化的安卓应用不仅能够提升用户体验,还能加强品牌识别度。本文将引导您了解如何从零开始设计和实现一个安卓应用,涵盖用户界面设计、功能开发和性能优化等关键环节。我们将以一个简单的记事本应用为例,展示如何通过Android Studio工具和Java语言实现基本功能,同时确保应用流畅运行。无论您是初学者还是希望提升现有技能的开发者,这篇文章都将为您提供宝贵的见解和实用的技巧。
|
2月前
|
搜索推荐 开发工具 Android开发
打造个性化Android应用:从设计到实现的旅程
【10月更文挑战第26天】在这个数字时代,拥有一个能够脱颖而出的移动应用是成功的关键。本文将引导您了解如何从概念化阶段出发,通过设计、开发直至发布,一步步构建一个既美观又实用的Android应用。我们将探讨用户体验(UX)设计的重要性,介绍Android开发的核心组件,并通过实际案例展示如何克服开发中的挑战。无论您是初学者还是有经验的开发者,这篇文章都将为您提供宝贵的见解和实用的技巧,帮助您在竞争激烈的应用市场中脱颖而出。
|
2月前
|
Web App开发 定位技术 iOS开发
Playwright 是一个强大的工具,用于在各种浏览器上测试应用,并模拟真实设备如手机和平板。通过配置 `playwright.devices`,可以轻松模拟不同设备的用户代理、屏幕尺寸、视口等特性。此外,Playwright 还支持模拟地理位置、区域设置、时区、权限(如通知)和配色方案,使测试更加全面和真实。例如,可以在配置文件中设置全局的区域设置和时区,然后在特定测试中进行覆盖。同时,还可以动态更改地理位置和媒体类型,以适应不同的测试需求。
Playwright 是一个强大的工具,用于在各种浏览器上测试应用,并模拟真实设备如手机和平板。通过配置 `playwright.devices`,可以轻松模拟不同设备的用户代理、屏幕尺寸、视口等特性。此外,Playwright 还支持模拟地理位置、区域设置、时区、权限(如通知)和配色方案,使测试更加全面和真实。例如,可以在配置文件中设置全局的区域设置和时区,然后在特定测试中进行覆盖。同时,还可以动态更改地理位置和媒体类型,以适应不同的测试需求。
98 1