`
dawuafang
  • 浏览: 1108572 次
文章分类
社区版块
存档分类
最新评论

Android在一个APP中通过包名或类名启动另一个APP

 
阅读更多



开发有时需要在一个应用中启动另一个应用,比如Launcher加载所有的已安装的程序的列表,当点击图标时可以启动另一个应用。一般我们知道了另一个应用的包名和MainActivity的名字之后便可以直接通过如下代码来启动:

Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_LAUNCHER);            
ComponentName cn = new ComponentName(packageName, className);            
intent.setComponent(cn);
startActivity(intent);

但是更多的时候,我们一般都不知道目标应用程序的启动Activity的类名,而只知道包名,接下来就需要这么做了,我封装成了一个方法,如下所示:

	private void doStartApplicationWithPackageName(String packagename) {

		// 通过包名获取此APP详细信息,包括Activities、services、versioncode、name等等
		PackageInfo packageinfo = null;
		try {
			packageinfo = getPackageManager().getPackageInfo(packagename, 0);
		} catch (NameNotFoundException e) {
			e.printStackTrace();
		}
		if (packageinfo == null) {
			return;
		}

		// 创建一个类别为CATEGORY_LAUNCHER的该包名的Intent
		Intent resolveIntent = new Intent(Intent.ACTION_MAIN, null);
		resolveIntent.addCategory(Intent.CATEGORY_LAUNCHER);
		resolveIntent.setPackage(packageinfo.packageName);

		// 通过getPackageManager()的queryIntentActivities方法遍历
		List<ResolveInfo> resolveinfoList = getPackageManager()
				.queryIntentActivities(resolveIntent, 0);

		ResolveInfo resolveinfo = resolveinfoList.iterator().next();
		if (resolveinfo != null) {
			// packagename = 参数packname
			String packageName = resolveinfo.activityInfo.packageName;
			// 这个就是我们要找的该APP的LAUNCHER的Activity[组织形式:packagename.mainActivityname]
			String className = resolveinfo.activityInfo.name;
			// LAUNCHER Intent
			Intent intent = new Intent(Intent.ACTION_MAIN);
			intent.addCategory(Intent.CATEGORY_LAUNCHER);

			// 设置ComponentName参数1:packagename参数2:MainActivity路径
			ComponentName cn = new ComponentName(packageName, className);

			intent.setComponent(cn);
			startActivity(intent);
		}
	}


版权声明:本文为博主原创文章,未经博主允许不得转载。

分享到:
评论

相关推荐

    着看所有apk的包名和类名,用于启动或关闭某个app

    着看所有apk的包名和类名,用于启动或关闭某个app

    Android包名类名查看

    可以查看android手机上所有程序的包名、类名的一个小app

    安卓获取apk包名类名

    获取apk包名类名,将apk安装到手机或者模拟器可以获取当前app的包名类名

    android查看包名类名工具

    这是一个android工程,可导入eclipse直接编译运行,功能是显示出android设备上的所有程序以及它们完整包名,主类名,图标和名称。以列表形式显示,只需写一个打开activity的方法就可以打开系统中安装了的apk,基于此...

    android adb shell 命令大全

    你可向一个设备或从一个设备中复制文件, 复制一个文件或目录到设备或模拟器上: adb push &lt;source&gt; &lt;destination&gt;&lt;/destination&gt;&lt;/source&gt; 如:adb push test.txt /tmp/test.txt 从设备或模拟器上复制一个...

    包名查看器-Android.apk

    查看app包名

    Google Android SDK开发范例大全(完整版)

    每个 Android 应用程序都在 Dalvik VM 的一个实例中运行,这个实例驻留在一个由 Linux 内核管理的进程中,如下图所示。 图 2. Dalvik VM Android 应用程序由一个或多个组件组成: 活动 具有可视 UI 的应用...

    AppIconNameChanger, 通过编程更改Android启动器应用程序 icon 和应用程序名的库 !.zip

    AppIconNameChanger, 通过编程更改Android启动器应用程序 icon 和应用程序名的库 ! AppIconNameChanger以编程方式更改 Android 应用 启动器 icon 和应用程序名称 ! 请使用以下链接从这里下载演示 : 使用以下链接...

    Android判断栈顶activity;打印当前最顶层的activity类名;采用服务后台运行获取当前activity类名;

    Android判断栈顶activity;打印当前最顶层的activity类名;采用服务后台运行获取当前activity类名;是一个demo App,使用Android studio工具打开,有需要的可以自行下载;

    安卓类名称查看器

    安卓类名称查看器 运行后,直接可查看到安卓软件的类名称,可直接通过adb操作某软件。

    Android快速低耗自由更新--Zwr sdk

    放一个layout xml文件到ZwrFile表的file name可以随便取 比如“main xml” Expand端删除所有代码 新建一个类 类名为上文所提到的(“com test bmob FirstView”) 继承自 ZwrExpandView 将实现的抽象方法的Layout...

    数据结构第一章绪论(关于这段知识的开始)

    3 创建一个新的Android工程 Project name(在计算机中存储工程的目录名): HelloWorld Package name(包名,请参考Java相关的概念): com.china.hello Activity name(UI界面窗口的类名,从Activity继承而来): Hello...

    Android代码-Rocket

    &gt; Android启动任务调度框架,用于缩短app启动时间 快速开始 STEP0 引入依赖,使用gradle dependencies { implementation 'cn.hikyson.rocket:rocket-core:VERSION_NAME' } STEP1 定义某一个任务: public class ...

    android_xposed:android xposed模块开发

    通过获取包名和类名, ok 如何通过代码以及包名卸载应用? ok 如何通过代码以及包名静默的卸载APP? ok 如何隐藏安装后的XposedInstall应用的图标? ok 如何使用Android Studio 打包改了代码的XposedInstall应用的Apk? ...

    Android代码-安卓H5交互,独立规则

    1,在交互规则里,js调用安卓,统一传一个action,作为标记,表明要执行的行动中的特定方法,然后传入参数,json格式的参数, 最后一个是回调方法。可以匿名实现回调方法。非常的方便。js调用安卓只需要一个方法,就...

    Android代码-一个可配置的迷你版轻量级Label辅助类,支持多种配置效果。

    基于 LabelViewHelper 实现的一个纯标签 View,可嵌套在 ViewGroup 中使用等 demo LabelImageView 基于 LabelViewHelper 实现的一个具备标签的 ImageView,可属性配置等 demo LabelLinearLayout 基于 ...

    工程硕士学位论文 基于Android+HTML5的移动Web项目高效开发探究

    Sqlite 一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中 W3C 万维网联盟,创建于1994年,是Web技术领域最具权威和影响力的国际中立性技术标准机构。主要的工作是发展 Web 规范,...

    android logcat使用

    tag是一个标识,可以是任意字符串,通常可以使用类名+方法名, 主要是用来在查看日志时提供一个筛选条件. 程序运行后 并不会在 ide的控制台内输出任何信息. 如果要后查看日志 请使用 adb logcat 关于adb的更多...

    unity做的讯飞安卓语音评测,识别,合成的demo

    unity做的讯飞安卓语音评测,识别,合成的demo。目录结构:根目录为unity的项目路径,...debug.arr文件,删除压缩包中的lib/classes.jar文件,这样才能吧app-debug.arr文件导入到unity项目中,否则会类名冲突打包失败。

    Android开发人员不得不收集的代码

    getAppPackageName : 获取 App 包名 getAppDetailsSettings: 获取 App 具体设置 getAppName : 获取 App 名称 getAppIcon : 获取 App 图标 getAppPath : 获取 App 路径 getAppVersionName : 获取 App 版本号 getApp...

Global site tag (gtag.js) - Google Analytics