android componentname activity,ComponentName的使用
ComponentName是安卓提供给我们的通过A应用启动B应用的一个类,与Intent同位于Android.content包下,这个类主要用来定义可见一个应用程序组件,例如:Activity,Service,BroadcastReceiver或者ContentProvider。
这是ComponentName的构造函数:ComponentName(String pkg,String cls)
在Android中详细描述一个组件,我们需要知道该组件所在的应用包名,也就是在AndroidManifest.xml文件中manifest根结点下的package=“com.XXXXX.XXXXX",还有组件在应用程序中的完整路径名,拿Activity来说,也就是activity节点中name属性的值,如
mActivityName = "com.XxX.XXX.activity.diagnose.DiagnoseActivity"
所以ComponentName可以用来封装一个组件的应用包名和组件的名字
我们已经知道,在Android中组件之间的交流往往使用意图(Intent)来完成的,那么在Intent中有一个方法可以封装一个ComponentName,最后我们在使用意图去完成我们需要实现的功能。下面来讲一下ComponentName如何使用。
Android 开发有时需要在一个应用中启动另一个应用,比如Launcher加载所有的已安装的程序的列表,当点击图标时可以启动另一个应用。一般我们知道了另一个应用的包名和MainActivity的名字之后便可以直接通过如下代码来启动(其中className是指完整的类名):
启动目标APP的主页面
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_LAUNCHER);
ComponentName cn = new ComponentName(packageName, className);
intent.setComponent(cn);
startActivity(intent);
启动目标APP的内部普通页面
ComponentName cn = new ComponentName(mPackageName, mActivityName);
try {
Intent intent = new Intent();
Bundle bundle = new Bundle();
bundle.putString("type", "1");//传递值
intent.putExtras(bundle);
intent.setComponent(cn);
startActivityForResult(intent, REQUEST_ID);//等待目标页面返回的结果
} catch (Exception e) {
e.printStackTrace();
}
但是有的时候,我们一般都不知道应用程序的启动Activity的类名,而只知道包名,我们可以通过ResolveInfo类来取得启动Acitivty的类名。
private void openApp(String packageName) {
PackageInfo pi = getPackageManager().getPackageInfo(packageName, 0);
Intent resolveIntent = new Intent(Intent.ACTION_MAIN, null);
resolveIntent.addCategory(Intent.CATEGORY_LAUNCHER);
resolveIntent.setPackage(pi.packageName);
List apps = pm.queryIntentActivities(resolveIntent, 0);
ResolveInfo ri = apps.iterator().next();
if (ri != null) {
String packageName = ri.activityInfo.packageName;
String className = ri.activityInfo.name;
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_LAUNCHER);
ComponentName cn = new ComponentName(packageName, className);
intent.setComponent(cn);
startActivity(intent);
}
}
android componentname activity,ComponentName的使用相关推荐
- Android中关于ComponentName的使用
Android中Intent对象提供许多属性: ComponentName Action Flags Extras Catgory Data 其中,ComponentName可以启动Activity. ...
- Android学习之ComponentName的使用
一.ComponentName简介 ComponentName,顾名思义,就是组件名称,这个类主要用来定义一个应用程序的组件,通过调用Intent中的setComponent方法,我们可以打开同个应用 ...
- c++builder启动了怎么停止_App 竟然是这样跑起来的 —— Android App/Activity 启动流程分析...
在我的上一篇文章: AJie:按下电源键后竟然发生了这一幕 -- Android 系统启动流程分析zhuanlan.zhihu.com 我们分析了系统在开机以后的一系列行为,其中最后一阶段 AMS( ...
- Android应用Activity、Dialog、PopWindow、Toast窗体加入机制及源代码分析
[工匠若水 http://blog.csdn.net/yanbober 转载烦请注明出处.尊重劳动成果] 1 背景 之所以写这一篇博客的原因是由于之前有写过一篇<Android应用setCont ...
- linux 和服务通讯,Android 的Activity和Service之间的通信
在Android中Activity负责前台界面展示,service负责后台的需要长期运行的任务.Activity和Service之间的通信主要由IBinder负责.在需要和Service通信的Acti ...
- Android应用Activity、Dialog、PopWindow、Toast窗口添加机制及源码分析
1 背景 之所以写这一篇博客的原因是因为之前有写过一篇<Android应用setContentView与LayoutInflater加载解析机制源码分析>, 然后有人在文章下面评论和微博 ...
- Android Hook Activity 的几种姿势
这篇博客已 API 27 的源码为基础分析 前言 在上一篇文章 Android Hook 机制之简单实战 中,我们介绍了 Hook 的要点 Hook 的选择点:静态变量和单例,因为一旦创建对象,它们不 ...
- Android 之 Activity 详解
最近在学习Android开发方面的知识,整理了一下关于Android中Activity方面的知识,也算是对自己学的知识进行了总结.Activity 在 Android开发中有着极其重要的位置,Acti ...
- Android筑基——Activity的启动过程之同进程在一个Activity中启动另一个Activity(基于api21)
目录 1. 前言 2. 正文 2.1 Activity类的startActivity()方法 2.2 Instrumentation类的execStartActivity()方法 2.3 Activi ...
最新文章
- 基于人工神经网络的不规则小天体引力场建模
- python利器怎么编程-python等自动化脚本编程利器 Script.NET
- .Net Core AA.FrameWork应用框架介绍
- PHP之MVC项目实战
- 生日祝福html_更新,礼包选择,头像框及太子生日金币活动
- 互联网创业的准备——行业与商业模式
- STM32F103代码远程升级(六)基于小米IoT开发者平台远程升级代码的实现
- 恩尼格玛机(字母转换,水题)
- dw相对路径怎么改_Dreamweaver绝对路径和相对路径
- Unity-瓦片地图详解
- Xbox360自制系统GOD包安装教程
- MindManager21简体中文永久版思维导图
- ChatGPT 侦探推理小说《神秘失踪》
- 软件开发项目计划编制过程(转)
- 杨云华师大计算机,2017-2018学年第二学期教师辅导-华东师范大学计算中心网站.DOC...
- php实现tptp客户端
- 创建、删除ubuntu账户,添加用户到组
- python数据挖掘 | 期末题
- 数据结构和算法(二):摘要算法之SHA和MD5
- 听完计算机讲座的感想,听讲座心得体会5篇