Android 学习 之 无需类名启动其他程序
在网上搜索了一会相关的实现代码,发现所有的文章都说是需要包名和类名。但是人家的程序,我们怎么可能知道哪个是第一个启动的Activity?所以,真正用在项目上,那种方法基本上没什么用的。于是查看官方文档,发现这样一个方法:
- public abstract Intent getLaunchIntentForPackage (String packageName)
英文原文:Return a “good” intent to launch a front-door activity in a package, for use for example to implement an “open” button when browsing through packages.大概意思就是返回一个程序入口的Intent,就是Java程序的Main方法。
这下简单了,直接startActivity(返回的intent)即可。
- import java.util.ArrayList;
- import java.util.HashMap;
- import java.util.List;
- import android.app.Activity;
- import android.content.Intent;
- import android.content.pm.PackageInfo;
- import android.content.pm.PackageManager;
- import android.os.Bundle;
- import android.view.View;
- import android.widget.AdapterView;
- import android.widget.ListView;
- import android.widget.AdapterView.OnItemClickListener;
- public class Main extends Activity {
- /** Called when the activity is first created. */
- ListView lv;
- Adapter adapter;
- ArrayList<HashMap<String, Object>> items = new ArrayList<HashMap<String, Object>>();
- PackageManager pm;
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- lv = (ListView) findViewById(R.id.lv);
- final PackageManager pm = getPackageManager();
- // 得到PackageManager对象
- List<PackageInfo> packs = pm
- .getInstalledPackages(PackageManager.GET_UNINSTALLED_PACKAGES);
- // 得到系统 安装的所有程序包的PackageInfo对象
- for (PackageInfo pi : packs) {
- HashMap<String, Object> map = new HashMap<String, Object>();
- map.put("icon", pi.applicationInfo.loadIcon(pm));
- // 图标
- map.put("appName", pi.applicationInfo.loadLabel(pm));
- // 应用名
- map.put("packageName", pi.packageName);
- // 包名
- items.add(map);
- // 循环读取存到HashMap,再增加到ArrayList.一个HashMap就是一项
- }
- adapter = new Adapter(this, items, R.layout.piitem, new String[] {
- "icon", "appName", "packageName" }, new int[] { R.id.icon,
- R.id.appName, R.id.packageName });
- // 参数:Context,ArrayList(item的集合),item的layout,包含ArrayList中Hashmap的key的数组,key所对应的值相对应的控件id
- lv.setAdapter(adapter);
- lv.setOnItemClickListener(new OnItemClickListener() {
- @Override
- public void onItemClick(AdapterView<?> parent, View view,
- int position, long id) {
- // TODO Auto-generated method stub
- String packageName = (String) items.get(position).get(
- "packageName");
- //取到点击的包名
- Intent i = pm.getLaunchIntentForPackage(packageName);
- //如果该程序不可启动(像系统自带的包,有很多是没有入口的)会返回NULL
- if (i != null)
- startActivity(i);
- }
- });
- }
- }
转自牛人:http://gundumw100.iteye.com/blog/1138158
Android 学习 之 无需类名启动其他程序的更多相关文章
- Android学习笔记——Activity的启动和创建
http://www.cnblogs.com/bastard/archive/2012/04/07/2436262.html Android Activity学习笔记——Activity的启动和创建 ...
- android如何用adb shell启动应用程序
昨天研究了很久,可能由于基础比较菜吧,所以,没有搜到一个可以直接解决问题的,需要综合几个之后,问题得以解决,记下方法,为了方便自己之后遇到同样问题,也为了方便搜索同样问题的朋友. 主要用到了aapt和 ...
- Android 学习手札(一) 应用程序架构
1.资源列表 Android支持的资源列表 目 录 资源类型 描述 res/anim XML 该目录用于存放帧(frame).动画或补间(tweened)动画文件 res/drawable ...
- Android学习总结——获取被启动的Activity传回的数据
当前Activity:包含一个Button和一个TextView,用于启动另一个Activity和显示传回的数据,这里重写了onActivityResult()方法. public class Mai ...
- Android学习笔记-App初始启动界面实现
android手机上的很多应用程序启动时都会先显示一个图片,作为该应用程序的开始,该图片转瞬即逝.这个图片一般都会用应用的图标,作为广告来用. 例如: 它的实现方式很简单,我们以一个测试APP为例,介 ...
- Android学习笔记_58_清除手机应用程序缓存
通过查看手机设置(setting)源代码,发现它里面获取应用大小和缓存大小是通过PackageManager里面的getPackageSizeInfo方法.然而此方法时私有的,因此通过反射调用此方法. ...
- Android学习十二:跑马灯程序实现(简单联系)
package org.tonny; import java.util.Timer; import java.util.TimerTask; import android.app.Activity; ...
- 二、Android学习第二天——初识Activity(转)
(转自:http://wenku.baidu.com/view/af39b3164431b90d6c85c72f.html) 一. Android学习第二天——初识Activity 昨天程序搭建成功以 ...
- Android学习——第一个NDK程序
在前面的学习中,我们已经讲解了关于NDK编程的环境搭建流程,简单的使用我们也通过官网本身自带的例子进行说明了.可是相信大家一定还存在这么的一个疑惑:“如果我要自己利用NDK编写一个Android应用, ...
随机推荐
- table可更改th大小的jQuery插件
(function ($) { $.fn.resizetable = function () { var tableObj = $(this); var inResizeRange = false; ...
- Shell脚本中让进程休眠的方法(sleep用法)
有时候写Shell的脚本,用于顺序执行一系列的程序. 有些程序在停止之后并没能立即退出,就例如有一个 tomcat 挂了,就算是用 kill -9 命令也还没瞬间就结束掉. 这么如果 shell 还没 ...
- 安装appuim
一.作为一名软件测试人员,对工作习惯和品质的有要求,要有对问题的敏感度,遇到问题就不能轻易放过,提前保存一切可能对分析解决问题有帮助的资料,不怕麻烦,尽可能的全面详细,不漏重点.若神经大条,嫌麻烦,不 ...
- mysql5.6 online ddl—索引
尝试对mysiam表(1500万)删除索引失败 #uk表字段类型比较简单,都是int/tinyint/timestamp类型. CREATE TABLE `uk` ( `id` int(11) NO ...
- redis事务、管道及消息通知探究
一.事务 redis中使用事务,multi表示事务开始,对redis进行一些列操作之后再用exec提交事务,对应的方法分别是Transaction jedis.multi(),List<Obje ...
- Codeforces 691D Swaps in Permutation
Time Limit:5000MS Memory Limit:262144KB 64bit IO Format:%I64d & %I64u Submit Status Prac ...
- jquery-图片轮播(新手请大神指教一下)
这是我刚学jquery写的,感觉效果不是很好. #scrollPics{ height: 330px; width: 980px; margin-bottom: 10px; overflow: hid ...
- OpenCV 图片尺寸调整
http://blog.csdn.net/xiaoshengforever/article/details/12191303 2013-09-30 12:21 10842人阅读 评论(0) 收藏 举报 ...
- hdu_3063_Play game(数论)
题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=3063 题意:中文题,说的很清楚,不解释 题解:公式题,具体看代码 #include<stdio. ...
- 15.找出如下数组中最大的元素和最小的元素, a[][]={{3,2,6},{6,8,2,10},{5},{12,3,23}}
package com.bao; public class Erweim { public static void main(String[] args) { int[][]a={{3,2,6},{6 ...