效果图:

程序列表:

启动程序,获取程序信息:

代码如下:

创建一个AppInfo类来表示应用程序

<pre name="code" class="java">public class AppInfo {public CharSequence title;// 程序名public CharSequence packageName; // 程序包名Intent intent;// 启动Intentpublic Drawable icon;// 程序图标/** 设置启动该程序的Intent*/final void setActivity(ComponentName className, int launchFlags) {intent = new Intent(Intent.ACTION_MAIN);intent.addCategory(Intent.CATEGORY_LAUNCHER);intent.setComponent(className);intent.setFlags(launchFlags);}}

创建程序列表的适配器:

/*** 程序列表适配器* @author bill**/
public class ShowAppListAdapter extends BaseAdapter {private ArrayList<AppInfo> appList;private LayoutInflater inflater;public ShowAppListAdapter(Context context,ArrayList<AppInfo> appList,PackageManager pm) {this.appList = appList;inflater = LayoutInflater.from(context);}public int getCount() {return appList.size();}public Object getItem(int position) {return appList.get(position);}public long getItemId(int position) {return position;}public View getView(int position, View convertView, ViewGroup parent) {final AppInfo info = appList.get(position);ViewHolder holder = null;if(null == convertView){convertView = inflater.inflate(R.layout.app_list_item, null);holder = new ViewHolder();holder.lv_image = (ImageView) convertView.findViewById(R.id.lv_icon);holder.lv_name = (TextView) convertView.findViewById(R.id.lv_item_appname);holder.lv_packname = (TextView) convertView.findViewById(R.id.lv_item_packageame);convertView.setTag(holder);}else {holder = (ViewHolder) convertView.getTag();}holder.lv_image.setImageDrawable(info.icon);final CharSequence name = info.title;final CharSequence packName = info.packageName;holder.lv_name.setText(name);holder.lv_packname.setText(packName);return convertView;}private final static  class ViewHolder{ImageView lv_image;TextView lv_name;TextView lv_packname;}}
public class MainActivity extends Activity {/** 应用程序集合*/private ArrayList<AppInfo> appInfos;private ListView lv_app;/** 管理应用程序包,并通过它获取程序信息*/private PackageManager pm;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.app_list);pm = getPackageManager();initView();new Thread(runable).start();}private void initView(){lv_app = (ListView) findViewById(R.id.app_list_view);lv_app.setOnItemClickListener(new AppDetailLinster());}private final Runnable runable = new Runnable() {public void run() {loadApplications();myHandler.obtainMessage().sendToTarget();}};private Handler myHandler = new Handler() {@Overridepublic void handleMessage(Message msg) {lv_app.setAdapter(new ShowAppListAdapter(MainActivity.this,appInfos, pm));}};/*** 加载应用列表*/private void loadApplications() {PackageManager manager = this.getPackageManager();Intent mainIntent = new Intent(Intent.ACTION_MAIN, null);mainIntent.addCategory(Intent.CATEGORY_LAUNCHER);final List<ResolveInfo> apps = manager.queryIntentActivities(mainIntent, 0);Collections.sort(apps, new ResolveInfo.DisplayNameComparator(manager));if (apps != null) {final int count = apps.size();if (appInfos == null) {appInfos = new ArrayList<AppInfo>(count);}appInfos.clear();for (int i = 0; i < count; i++) {AppInfo application = new AppInfo();ResolveInfo info = apps.get(i);application.title = info.loadLabel(manager);application.setActivity(new ComponentName(info.activityInfo.applicationInfo.packageName,info.activityInfo.name), Intent.FLAG_ACTIVITY_NEW_TASK| Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);application.icon = info.activityInfo.loadIcon(manager);application.packageName = info.activityInfo.applicationInfo.packageName;appInfos.add(application);}}}/*** 列表监听类* @author bill**/public final class AppDetailLinster implements OnItemClickListener {AlertDialog dialog;public void onItemClick(AdapterView<?> view, View arg1,final int position, long arg3) {AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);builder.setTitle("选项");builder.setItems(R.array.choice, new OnClickListener() {public void onClick(DialogInterface dialog, int which) {final AppInfo appInfo = appInfos.get(position);switch (which) {case 0: // 启动程序try {startApp(appInfo);} catch (Exception e) {}break;case 1: // 详细信息try {showAppDetail(appInfo);} catch (Exception e) {}break;}dialog.dismiss();}private void showAppDetail(AppInfo appInfo)throws Exception {final String packName = appInfo.packageName.toString();final PackageInfo packInfo = getAppPackinfo(packName);final String versionName = packInfo.versionName;final String[] apppremissions = packInfo.requestedPermissions;final String appName = appInfo.title.toString();Intent showDetailIntent = new Intent(MainActivity.this,ShowAppDetailActivity.class);Bundle bundle = new Bundle();bundle.putString("packagename", packName);bundle.putString("appversion", versionName);bundle.putStringArray("apppremissions", apppremissions);bundle.putString("appname", appName);showDetailIntent.putExtras(bundle);startActivity(showDetailIntent);}private void startApp(AppInfo appInfo)throws Exception {final String packName = appInfo.packageName.toString();final String activityName = getActivityName(packName);if (null == activityName) {Toast.makeText(MainActivity.this, "程序无法启动",Toast.LENGTH_SHORT);return;}Intent intent = new Intent();intent.setComponent(new ComponentName(packName,activityName));startActivity(intent);}});dialog = builder.create();dialog.show();}}/*** 获取程序信息* @param packName* @return* @throws Exception*/public PackageInfo getAppPackinfo(String packName) throws Exception {return pm.getPackageInfo(packName, PackageManager.GET_ACTIVITIES| PackageManager.GET_PERMISSIONS);}/*** 获取启动相关程序的Activity* @param packName* @return* @throws Exception*/public String getActivityName(String packName) throws Exception {final PackageInfo packInfo = pm.getPackageInfo(packName,PackageManager.GET_ACTIVITIES);final ActivityInfo[] activitys = packInfo.activities;if (null == activitys || activitys.length <= 0) {return null;}return activitys[0].name;}
}

app_list.xml:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="fill_parent"android:layout_height="fill_parent"android:orientation="vertical"android:background="@android:color/black" ><ListViewandroid:id="@+id/app_list_view"android:layout_width="fill_parent"android:layout_height="fill_parent"></ListView></RelativeLayout>

app_list_item.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:orientation="horizontal" android:layout_width="fill_parent"android:layout_height="wrap_content" android:gravity="center_vertical"><ImageViewandroid:id="@+id/lv_icon"android:layout_width="48px"android:layout_height="48px"android:layout_marginTop="5px"android:layout_marginBottom="5px"></ImageView><LinearLayoutandroid:orientation="vertical"android:layout_width="wrap_content"android:layout_height="48px"android:paddingLeft="5px"><TextViewandroid:id="@+id/lv_item_appname"android:layout_width="fill_parent"android:layout_height="wrap_content"android:singleLine="true"android:textSize="16px"android:textStyle="bold"android:textColor="#fff"></TextView><TextViewandroid:id="@+id/lv_item_packageame"android:layout_width="fill_parent"android:layout_height="wrap_content"android:singleLine="true"android:textColor="#fff"></TextView></LinearLayout>
</LinearLayout>
/*** 查看应用信息* @author bill**/
public class ShowAppDetailActivity extends Activity {private TextView tv_appname;private TextView tv_appversion;private TextView tv_packagename;private TextView tv_permission;@Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);setContentView(R.layout.app_detial);tv_appname = (TextView) findViewById(R.id.detail_app_name);tv_appversion = (TextView) findViewById(R.id.detail_app_version);tv_packagename = (TextView) findViewById(R.id.detail_app_packname);tv_permission = (TextView) findViewById(R.id.detail_app_permissions);Bundle bundle = this.getIntent().getExtras();String packagename=  bundle.getString("packagename");String appversion = bundle.getString("appversion");String appname = bundle.getString("appname");String[] appPremissions = bundle.getStringArray("apppremissions");StringBuilder sb = new StringBuilder();for(String s : appPremissions){sb.append(s);sb.append("\n");}tv_appname.setText(appname);tv_appversion.setText(appversion);tv_packagename.setText(packagename);tv_permission.setText(sb.toString());}
}

app_detial.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:orientation="vertical"android:layout_width="fill_parent"android:layout_height="fill_parent"><TableLayout android:id="@+id/app_table"android:layout_width="fill_parent"android:layout_height="wrap_content"><TableRow android:id="@+id/tableRow1"android:layout_width="wrap_content"android:layout_height="wrap_content"><TextView android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="程序名字"/><TextView android:layout_width="wrap_content"android:layout_height="wrap_content"android:id="@+id/detail_app_name"/></TableRow><TableRow android:id="@+id/tableRow2" android:layout_width="wrap_content" android:layout_height="wrap_content"><TextView android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="程序版本"/><TextView android:layout_width="wrap_content"android:layout_height="wrap_content"android:id="@+id/detail_app_version"/></TableRow><TableRowandroid:id="@+id/tableRow3" android:layout_width="wrap_content" android:layout_height="wrap_content"><TextView android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="程序包名"/><TextView android:layout_width="wrap_content"android:layout_height="wrap_content"android:id="@+id/detail_app_packname"/></TableRow><TableRow android:id="@+id/tableRow4"android:layout_width="wrap_content" android:layout_height="wrap_content"><TextView android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="程序权限"/><TextView android:layout_width="wrap_content"android:layout_height="wrap_content"android:id="@+id/detail_app_permissions"/>    </TableRow></TableLayout></LinearLayout>

最后别忘了配置AndroidManifest。

转载请注明出处:http://blog.csdn.net/hai_qing_xu_kong/article/details/44274387 情绪控_

Android之如何获取手机程序列表以及程序相关信息并启动指定程序相关推荐

  1. android如何读取sim卡联系人信息,Android上如何获取手机和sim卡的联系人信息

    需求很明确,获取手机和sim的联系人信息.接口设计也很简介 public interface OnFetchContactsListener { void onFetcherContactsCompl ...

  2. 在Android中快速获取手机的高级权限

    在Android中快速获取手机的高级权限 想要快速获取Android手机的ROOT权限吗?也许因为ROOT教程太复杂,也许因为不会进工程模式,让我们在使用Android手机时感觉像是开别人的车一样,总 ...

  3. JS - 获取当前页面的 url地址 及 相关信息

    JS - 获取当前页面的 url地址 及 相关信息 一. 获取当前页面的 url地址 二. 获取当前网址url 后的指定参数 一. 获取当前页面的 url地址 window.location 以htt ...

  4. Android获取手机WiFi IP地址,MAC地址和网关地址程序实例

    现在博主在上大三,正在学习一些计算机网络的一些概念,知道了局域网ip和网关ip不同的概念,当时还纳了闷了2的32次方好像不咋够用啊,原来是这个样子. 由于之前学过一段时间的Android,同时又在上A ...

  5. Android开发之获取手机SIM卡信息

    TelephonyManager是一个管理手机通话状态.电话网络信息的服务类,该类提供了大量的getXxx(),方法获取电话网络的相关信息. TelephonyManager类概述: 可用于访问有关设 ...

  6. Android中如何获取手机屏幕大小

    我们可以通过使用类DisplayMetrics来获取手机屏幕的分辨率大小.DisplayMetrics类是获取手机屏幕各种属性的关键类.下面通过例子来展示如何获取手机屏幕的分辨率. 在布局文件main ...

  7. Android初级教程获取手机系统联系人信息

    在手机内部,对联系人信息存在对应的数据库.我们创建的而联系人信息都存在这张表中.如下是对数据库的截图,我已经对表和应该注意的地方做了红笔标注: 好了,现在可以根据数据库里面的数据来写代码了. 代码如下 ...

  8. 信号强度 android,一种获取手机信号强度的方法

    出于项目需求,需要获取到手机信号强度.本人不才,以前都是采用toString()的方法,然后截取,得到强度,但发现很多机型都不适合.苦苦在API中搜寻,结果都不是很理想.最后在Stackoverflo ...

  9. android pak文件_Android 获取手机中已安装apk文件信息

    通过PackageManager可以获取手机端已安装的apk文件的信息,具体代码如下 PackageManager packageManager = this.getPackageManager(); ...

最新文章

  1. SDO_Geometry 相关学习
  2. C 常用新特性(下)
  3. 【HDU - 1452】 Happy 2004(因子和,逆元,快速幂)
  4. js 多个input值拼接json字符串
  5. 【干货】一文带你看透深度学习框架演进
  6. 如何分析及处理 Flink 反压?
  7. Android中Xposed框架篇---修改系统位置信息实现自身隐藏功能
  8. Git下载(下载失败解决方式)
  9. 【读书笔记】大数据 数据挖掘 相关
  10. 以太坊智能合约开发语言 - Solidity
  11. Dev++ 环境设置C语言关键字显示颜色
  12. vbox虚拟机上装了银行的网络认证软件后不能正常使用的问题
  13. CHIP-seq流程学习笔记(7)-热图软件 deeptools
  14. @开发者:个推小程序消息推送解决方案来了
  15. openlayers4+中台风路径播放优化
  16. 会做饭,擅长烹饪,会给你的工作生活带来怎样的不同?
  17. CodeLab:Android fundamentals 04.2:Input controls
  18. 数据结构(Data Structure)(C/C++)PTA习题+课后习题
  19. CPU性能指标了解及字符型服务器登陆方式
  20. 苹果屏幕尺寸_搭载 mini LED 屏幕的 iPad Pro 要来了?!

热门文章

  1. 下拉列表 php,php数组生成html下拉列表的方法
  2. 学生卡变成普通卡_刚接触流量卡的小白看这一篇就够了!!!
  3. 21天mysql_把整个Mysql拆分成21天,轻松掌握,搞定(下)
  4. 010-你觉得单元测试可行吗
  5. 《使用CSLA 2019:CSLA .NET概述》原版和机译文档下载
  6. Java与Excel的交互!-
  7. DNS 隐蔽通道工具资料汇总
  8. Hibernate执行原生SQL
  9. 根据STATUS信息对MySQL进行优化
  10. android 听筒播放声音