在网上搜索了一会相关的实现代码,发现所有的文章都说是需要包名和类名。但是人家的程序,我们怎么可能知道哪个是第一个启动的Activity?所以,真正用在项目上,那种方法基本上没什么用的。于是查看官方文档,发现这样一个方法
1
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)即可。
下面的代码基于前文Android得到系统已安装应用程序包列表方法 自定义ListView显示 PackageManager的使用,直接下载前文的包,把Main.java内容替换成以下就可以:
package com.pocketdigi;
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);
}
});
}
}
[align=left][/align]
原文:http://www.pocketdigi.com/20110728/427.html
分享到:
相关推荐
在Android系统中,一个应用程序(App)启动另一个应用程序是通过Intent机制实现的。Intent是Android系统中的一个核心组件,它用于在组件之间传递消息,包括启动新的Activity、Service或者BroadcastReceiver。在这里...
不过,通常不建议在Application的onCreate()方法中直接启动Activity,因为这可能会导致Activity在用户期望之前过早启动,影响用户体验。如果需要在特定条件或事件下启动Activity,可以考虑使用广播接收器、服务或者...
在Android应用开发中,"动态设置启动的第一个Activity"是一个高级且实用的技术,它允许开发者根据特定条件或用户需求在运行时动态地改变应用程序的入口点。通常,AndroidManifest.xml文件中定义了应用的启动Activity...
有时,我们可能需要在一个应用(应用A)中启动另一个应用(应用B)的Activity,这通常涉及到跨应用通信。本教程将深入讲解如何实现这个功能,并提供一个简单的示例。 首先,要从一个应用启动另一个应用的Activity,...
例如,我们可以在一个应用程序中启动另一个应用程序的活动,或者在同一个应用程序中启动不同的活动。那么,如何实现 Android 中启动自己另一个程序的活动呢? 首先,我们需要了解 Android 中的 Intent 机制。Intent...
Activity启动流程是Android系统中一个非常核心的部分,它是应用程序组件之一,负责创建和管理应用的用户界面。当我们想要启动一个新的Activity时,背后有一系列复杂的交互过程,涉及多个组件和类。本文将通过代码...
一旦改模式的Activity的实例存在于某个栈中,任何应用再激活改Activity时都会重用该栈中的实例,其效果相当于多个应用程序共享一个应用,不管谁激活该Activity都会进入同一个应用中。 其中standard是系统默认的启动...
在Android系统中,一个应用程序启动另一个应用程序是一种常见的交互方式,这涉及到Android的组件通信机制,尤其是Activity和Intent的使用。让我们深入探讨这个话题。 首先,应用程序内的Activity跳转是Android应用...
每次启动Activity时,系统都会创建一个新的实例,并将其添加到当前的任务栈中。即使目标Activity已经存在于栈中,也会创建新的实例。这种模式下,一个Activity可以有多个实例,它们可以在不同的任务栈中存在。 2. *...
如果第一个Activity被部分遮挡,如第二个Activity启动到前台,那么第一个Activity会调用onPause()和onStop(),而当第二个Activity关闭后,第一个Activity可能会调用onRestart()、onStart()和onResume()。 Activity...
应用界面中会有两个按钮,一个用于拨打电话,一个用于启动新的Activity。当用户点击按钮时,相应的Intent会被创建并启动对应的操作。 ### 注意事项 - 显式关闭Activity应谨慎使用,因为可能影响用户的导航体验。 -...
总结一下,启动另一个Activity并利用Intent传输数据是Android开发中的常见操作,涉及的主要步骤包括: 1. 创建Intent并指定目标Activity。 2. 使用`putExtra()`方法添加要传递的数据。 3. 在目标Activity中,通过`...
在Android开发中,有时我们需要实现一个功能,即在一个应用程序(宿主应用)中启动另一个应用程序(目标应用)。这种场景常见于应用内部推荐、更新或插件化开发等。标题"一个应用中启动另一个应用程序"正是指这个...
PackageManagerService在启动时会启动一个叫做PackageManagerService的管理服务,并且通过他来安装系统中的应用程序,在这个过程中,PackageManagerService会对应用程序的配置文件AndroidManifest.xml进行解析,从而...
在Android应用程序中,每个`Activity`都代表了一个屏幕,用户可以在不同的`Activity`之间进行导航。当用户点击界面上的一个按钮时,通常会触发到另一个`Activity`的跳转。 #### 二、创建Activity 在开始之前,我们...
2. **使用FLAG_ACTIVITY_CLEAR_TASK和FLAG_ACTIVITY_NEW_TASK**:在启动新Activity的Intent中添加这两个标志,这样新Activity将启动一个新的任务,并清除之前的所有Activity。 ```java Intent intent = new ...
4. **暂停(Paused)**:如果另一个Activity半透明或全屏覆盖当前Activity,`onPause()`会被调用,此时Activity虽然可见,但不能接收用户输入。 5. **停止(Stopped)**:当Activity被完全遮挡,如弹出一个全屏...
`Intent`是安卓系统中的一个核心组件,它用于表示应用程序中的一个动作,如启动一个新的`Activity`或者服务。在数据传递中,`Intent`主要用来创建一个从一个`Activity`到另一个`Activity`的通道。 ```java // 创建...
这是最严格的启动模式,不仅限制在同一任务栈内只有一个实例,而且这个Activity的实例会在一个单独的任务栈中,这意味着任何启动该Activity的请求都会在这个栈中进行,即使源Activity和目标Activity都在同一个应用内...