android componentname activity,ComponentName的使用

android componentname activity,ComponentName的使用ComponentName是安卓提供给我们的通过A应用启动B应用的一个类,与Intent同位于Android.content包下,这个类主要用来定义可见一个应用程序组件,例如:Activity,Service,BroadcastReceiver或者ContentProvider。这是ComponentName的构造函数:ComponentName(Stringpkg,Stringcls)在An…

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);

}

}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/38447.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注