您的位置:首页 > 移动开发

Android中app之间的交互(二,使用ComponentName)

2016-03-10 14:02 369 查看
本篇笔记中我在简单介绍一下使用ComponentName来与当前应用之外的应用进行交互。1,ComponentName介绍在介绍Component之前,我们首先来了解ComponentName这个类;ComponentName与Intent同位于android.content包下,我们从Android官方文档中可以看到,这个类主要用来定义可见一个应用程序组件,例如:Activity,Service,BroadcastReceiver或者ContentProvider。那么,如何用ComponentName来定义一个组件呢。这是ComponentName的构造函数:ComponentName(String pkg,String cls)我们知道在Android应用程序中如果要详细描述一个组件我们需要知道该组件所在的应用包名,也就是在AndroidManifest.xml文件中manifest根结点下的package=“XXX.XXXXX.XXXXX",还有组件在应用程序中的完整路径名,拿Activity来说,也就是activity节点中name属性的值。因此到这里我们也就明白了可以使用ComponentName来封装一个组件的应用包名和组件的名字。我们已经知道,在Android中组件之间的交流往往使用意图(Intent)来完成的,那么在Intent中有一个方法可以封装一个ComponentName,最后我们在使用意图去完成我们需要实现的功能。

2,举例:启动另一个APK

首先我们要新建两个Android应用程序,appsend和appreceiver。appreceiver的AndroidMainfest.xml[html] viewplain copyprint?<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android"<span style="color:#cc0000;"> <strong>package="com.example.appreceiver"</strong></span>android:versionCode="1"android:versionName="1.0" ><uses-sdkandroid:minSdkVersion="11"android:targetSdkVersion="18" /><applicationandroid:allowBackup="true"android:icon="@drawable/ic_launcher"android:label="@string/app_name"android:theme="@style/AppTheme" ><activity<strong><span style="color:#ff0000;"> android:name="com.example.appreceiver.MainActivity"</span></strong>android:label="@string/app_name" ><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity></application></manifest>appsend中的启动Activity的片段:
public void button(View view) {ComponentName cn=new ComponentName("com.example.appreceiver", "com.example.appreceiver.MainActivity");Intent intent = new Intent();intent.setComponent(cn);startActivityForResult(intent, 2);}  

3,举例:启动另一个APK

要被启动的APK的AndroidMainfest.xml文件如下:
<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.autochips.avin" ><applicationandroid:icon="@drawable/mm_icon"android:label="@string/app_name"android:name="com.autochips.avin.AVINApp"><activityandroid:screenOrientation="landscape"android:process="android.process.avin"android:taskAffinity="android.task.avin"android:configChanges="keyboardHidden|orientation"android:label="@string/app_name"android:name="com.autochips.avin.AVInActivity"android:theme="@android:style/Theme.NoTitleBar"android:background="@color/background"><intent-filter><!-- 当前界面显示 --><action android:name="android.intent.action.MAIN" /><!-- 在桌面上创建图标 --><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity><activityandroid:screenOrientation="landscape"android:label="@string/app_name"android:name="com.autochips.avin.AVInSelectActivity"android:theme="@android:style/Theme.NoTitleBar"></activity></application><uses-permission android:name="android.permission.RESTART_PACKAGES" /><uses-permission android:name="android.permission.FORCE_STOP_PACKAGES" /><uses-permission android:name="android.permission.INTERNAL_SYSTEM_WINDOW"/><supports-screensandroid:anyDensity="true"android:largeScreens="true" ></supports-screens></manifest>
当前APK中需要启动另一个APK的代码如下:
<pre name="code" class="java">
Intent intent = new Intent();ComponentName name = new ComponentName("com.autochips.avin", "com.autochips.avin.AVInActivity");intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);try {mContext.startActivity(intent);} catch (Exception e) {e.printStackTrace();}

                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: