在网上搜索了一会相关的实现代码,发现所有的文章都说是需要包名和类名。但是人家的程序,我们怎么可能知道哪个是第一个启动的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 {
-
- 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();
-
- List<PackageInfo> packs = pm
- .getInstalledPackages(PackageManager.GET_UNINSTALLED_PACKAGES);
-
-
- 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);
-
- }
-
- adapter = new Adapter(this, items, R.layout.piitem, new String[] {
- "icon", "appName", "packageName" }, new int[] { R.id.icon,
- R.id.appName, R.id.packageName });
-
- lv.setAdapter(adapter);
- lv.setOnItemClickListener(new OnItemClickListener() {
-
- @Override
- public void onItemClick(AdapterView<?> parent, View view,
- int position, long id) {
-
- String packageName = (String) items.get(position).get(
- "packageName");
-
- Intent i = pm.getLaunchIntentForPackage(packageName);
-
- if (i != null)
- startActivity(i);
- }
-
- });
-
- }
-
- }
欢迎指教!
分享到:
相关推荐
在Android应用程序开发中,Intent是连接各个组件(如Activity、Service等)的关键桥梁,主要用于启动和关闭Activity。Intent不仅能够启动一个新的Activity,还能在Activity之间传递数据,实现应用内部或应用间的交互...
在Android系统中,Activity是应用程序的基本组件,它负责与用户交互并展示UI。"android Activity自启动"这个主题涉及到如何让一个Activity在设备开机时自动启动,这在一些需要后台服务或者持续监控的App中非常常见,...
Intent是用来表示应用程序中的一个动作,它可以携带数据,用于启动Activity、Service或者BroadcastReceiver。在启动另一个APK的Activity时,我们需要创建一个Intent,并设置相应的参数。 1. **创建Intent**: 首先...
在Android系统中,每个应用程序都有一个独一无二的标识,即包名(Package Name),它是由开发者在创建应用时自定义的,通常遵循域名反写规则,例如com.example.myapp。包名在Android系统中起到类似互联网上的URL作用...
在Android应用开发中,Activity是应用程序的基本组件,用于展示用户界面和处理用户交互。Activity之间的数据传递是一个常见的需求,尤其在构建多层级、复杂交互的应用时。本篇将详细讲解如何在Android Studio 3.1...
NativeActivity是Android系统提供的一种特殊类型的Activity,允许开发者在原生C/C++代码中实现应用程序的主界面和交互逻辑,无需通过Java层作为中介。 描述中的“AInputQueue(const sp<InputChannel>& channel, int...
Android系统中的Activity是用户界面的主要组成部分,它负责处理与用户的交互,展示UI,并管理应用程序的生命周期。每个Activity都有一个唯一的包名和类名,包名用于区分不同的应用,类名则代表了具体的Activity实现...
在Android开发中,启动另一个应用程序中的Activity是一项常用的技术,它允许我们的应用与系统中的其他应用进行交互,增强用户体验。在上述描述中,提到了两种主要的启动方式:通过`ACTION_VIEW`和通过设置`Intent`的...
在Android开发中,动态加载Activity是一种高级技巧,它允许开发者在运行时动态地加载和执行新的Activity实例,而无需在应用程序的主apk中预先声明。这种技术基于Java的反射机制,使得应用程序更加灵活,可以实现插件...
在Android应用开发中,Activity和Intent是两个至关重要的概念,它们构成了Android应用程序的基本交互机制。这篇笔记我们将深入探讨这两个核心组件及其之间的关系。 首先,Activity是Android中的一个基础组件,可以...
在Android系统中,每个应用程序都运行在自己的进程中,它们之间默认是隔离的,无法直接通信。但有时我们可能需要在不同的应用之间交换数据或者调用其他应用的功能,这就涉及到了"跨进程通讯"。本教程将重点讲解如何...
在Android应用开发中,有效地管理Activity和Fragment之间的跳转对于构建用户友好的界面至关重要。"通过Restful的uri完成Activity和Fragment的跳转"是一种利用Restful风格的URL来实现组件间导航的方法。Restful URI...
Service是在Android应用程序中提供的一种后台运行机制,它允许开发者在没有用户界面的情况下执行任务。Service不同于线程,它有自己的独立生命周期,并且可以被其他组件(如Activity)启动或绑定。 二、Service的...
- 启动新Activity:通过调用`startActivity(Intent intent)`方法,可以在当前Activity中启动另一个Activity。 - 跳转回上一个Activity:可以使用`finish()`方法关闭当前Activity,返回上一个Activity。 - 开启...
例如,当用户从一个应用程序(如短信应用)切换到另一个应用程序(如浏览器),如果此属性设为true,那么Activity可以被重新分配到新的任务中。 #### 2. `android:alwaysRetainTaskState` 此属性用于控制当...
Intent是Android系统中一个至关重要的组件,它是应用程序之间通信的主要桥梁,用于启动其他组件或传递数据。在Android开发中,理解并熟练运用Intent是成为合格开发者的基础。本篇将深入探讨Intent的使用,包括页面间...
在Android系统中,ContentProvider是一种核心组件,它允许应用程序之间共享数据,而无需直接访问对方的内部存储。在本教程中,我们将深入探讨如何利用ContentProvider来操作文件,以及其在跨应用数据传输中的作用。 ...
在IT行业中,有时候我们需要通过编程方式来自动化或者定制化一些操作,例如自动启动应用程序。"简单的代码启动微信"这个主题就涉及到了这样的技术。微信,作为一款广泛使用的即时通讯工具,提供了API接口供开发者...