在网上搜索了一会相关的实现代码,发现所有的文章都说是需要包名和类名。但是人家的程序,我们怎么可能知道哪个是第一个启动的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
分享到:
相关推荐
本话题主要涉及如何查看APK文件的包名和类名,这对于调试、自动化测试、安全分析以及管理Android设备上的应用程序至关重要。"511遇见apk包名类名查看工具.exe"是一个可能用于这个目的的实用工具。这个工具允许用户...
在Android开发过程中,调试和分析应用的行为至关重要,而"android开发辅助工具 抓取包名类名工具"就是这样一款实用的工具,它专门用于帮助开发者快速获取设备上安装的应用程序的包名和类名信息。这个工具对于进行...
在Android应用程序开发中,Intent是连接各个组件(如Activity、Service等)的关键桥梁,主要用于启动和关闭Activity。Intent不仅能够启动一个新的Activity,还能在Activity之间传递数据,实现应用内部或应用间的交互...
在Android 6.0及以上版本,如果需要在没有明确声明权限的情况下启动其他应用,可能需要请求`Manifest.permission.INSTALL_PACKAGES`权限。不过,通常情况下,只需要在AndroidManifest.xml中声明`<uses-permission>`...
在Android系统中,Activity是应用程序的基本组件,它负责与用户交互并展示UI。"android Activity自启动"这个主题涉及到如何让一个Activity在设备开机时自动启动,这在一些需要后台服务或者持续监控的App中非常常见,...
在Android应用开发中,Service是四大组件之一,它在后台执行长时间运行的操作,不与用户界面交互。Service的学习对于深入理解Android系统以及构建高效、稳定的应用至关重要。本篇将主要探讨Service的基本概念、使用...
选项B正确,内存回收程序负责释放无用内存,程序员无需手动创建线程来释放内存。选项C和D是错误的,因为内存回收程序不允许程序员直接释放内存,且通常无法在指定时间释放内存对象。 2. **Intent的作用**:Intent在...
- Android小部件是Android系统提供的一种轻量级UI组件,可以在主屏幕上显示应用程序的部分功能,用户无需打开应用就能直接进行操作。在这个项目中,Widget用于展示预设的联系人快捷拨号按钮。 2. **...
用户只需将压缩包下载并解压到任意位置,然后直接运行主程序(如REFILESNAME.exe)就能启动工具。这种设计避免了在系统中留下冗余文件,也不会对注册表造成影响,易于携带和分享。 标签“批量”、“修改”、...
NativeActivity是Android系统提供的一种特殊类型的Activity,允许开发者在原生C/C++代码中实现应用程序的主界面和交互逻辑,无需通过Java层作为中介。 描述中的“AInputQueue(const sp<InputChannel>& channel, int...
uni-app是由Egret Wing团队开发的多端开发框架,支持编写一次代码,发布到iOS、Android、H5、微信小程序、支付宝小程序等多个平台。uni-app利用Vue.js语法,提供丰富的组件和API,简化了跨平台开发的复杂度,提高了...
AppWidget是Android操作系统提供的一种组件,允许开发者在用户主屏幕上创建小型应用程序,这些小部件无需用户直接启动应用就能显示和交互。AppWidget为用户提供了一种快速访问应用功能的方式,增强了用户体验。本文...
在Android应用开发中,四大组件是Activity、Service、BroadcastReceiver和ContentProvider,它们构成了应用程序的基础架构。本篇文章将深入探讨四大组件之一的Service,并通过一个名为"servicesdemo"的示例项目来...
在Android系统中,ContentProvider是一种核心组件,它允许应用程序之间共享数据,而无需直接访问对方的内部存储。在本教程中,我们将深入探讨如何利用ContentProvider来操作文件,以及其在跨应用数据传输中的作用。 ...
在Android系统中,我们可以通过编写小程序或应用Widget来实现一键启动微信的功能,这样可以极大地提升用户体验,特别是在智能家居、车载设备等场景下。 首先,我们要理解如何在Android中启动一个应用。Android系统...
这对于理解和调试已有的Java应用程序,尤其是Android应用,具有极大的便利性。 2. **使用JD-GUI进行Android逆向工程** 在Android应用中,Dalvik字节码是运行在设备上的,但JD-GUI主要处理的是Java字节码。因此,...
在Android开发中,启动另一个应用程序中的Activity是一项常用的技术,它允许我们的应用与系统中的其他应用进行交互,增强用户体验。在上述描述中,提到了两种主要的启动方式:通过`ACTION_VIEW`和通过设置`Intent`的...
2. **隐式Intent**:如果目标Activity公开了Intent Filter,我们还可以通过隐式Intent启动它,无需知道具体的类名。Intent Filter在AndroidManifest.xml中定义了Action、Category和Data,匹配这些属性的Intent就可以...