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();}
相关文章推荐
- 【iOS开发系列】tableViewCell简单动画
- mac下编译FFmpeg-Android
- 字符串与数组的转化iOS
- iOS-生成plist文件,在项目中代码创建plist
- Android中的颜色设置
- android如何实现国际化
- Android 2016新技术
- WebView中的乱码问题
- Android Studio添加assets文件夹
- android获取尺寸相关类
- Android Bundle类
- 关于android的App主题出错问题
- IOS开发中(null)与<null>的处理
- App架构设计经验谈:展示层的设计
- IOS数组排序
- IOS性能优化方面的文章,Mark下
- Android项目:手机安全卫士(9)—— 手机号码归属地查询
- android用SharedPreferences实现登录时记住密码功能
- 对Android系统权限的认识(包含如何获得root权限思路)
- iOS URL scheme