|
Intent是Android系统重要的互操作机制。在各个组件之间的通讯中,主要是由Intent协助完成的。Intent负责对应用中一次操作的动作、动作涉及数据、附加数据进行描述,Android则根据此Intent的描述,负责找到对应的组件,将Intent传递给调用的组件,并完成组件的调用。因此,Intent在这里起着一个媒体中介的作用,专门提供组件互相调用的相关信息,实现调用者与被调用者之间的解耦。
除了使用基于SDK的原生开发,目前也有很多web的开发框架支持通过JS实现移动应用。同样,对于Intent都有着非常关键的扩展。在Rexsee的扩展中,rexseeIntent对象用于不同应用程序之间的互相调用,例如在本应用程序中调用其它应用程序并获得返回、向整个系统发送广播消息或者在其它应用程序调用自身时返回有用的数据。(关于rexsee的信息可以在它的社区查看:http://www.rexsee.com/)
例举一些常用的使用方法:
1.创建和清除:如果intent不存在创建一个intent
if(!rexseeIntent.isReady()){
rexseeIntent.create();
rexseeDialog.toast('Finished.');
}
2.基本设置:
设置当前Intent的Action:rexseeIntent.setAction('android.intent.action.VIEW');
设置当前Intent的目标应用软件及应用软件中的活动(类名):rexseeIntent.setComponent('com.android.mms','com.android.mms.ui.ConversationList');
向当前Intent添加Extra:rexseeIntent.putExtra('my.testExtra','int','65');
读取key指定的Extra的值,如果该值不存在,根据类型不同,会返回空、-1、false或null:alert(rexseeIntent.getExtra('my.testExtra','int'));
读取Extra的个数:alert(rexseeIntent.getNumberOfExtras());
3.调用其他应用程序
发送当前Intent,所调用的应用程序返回后触发事件onIntentCallback,在该事件中可以用getData()、getExtra()等函数读取返回的数据:rexseeIntent.startWithCallback();
4.响应其它应用程序对自身的调用
拷贝调用本程序的Intent,在使用getAction()、getData()等函数获取数据前,必须首先调用该函数:alert(rexseeIntent.copyInitIntent());
还有很多具体的用法,可以在社区的开放源码中看到:http://www.rexsee.com/CN/helpReference.php
附一段完整的代码,可以比较明确的看到rexseeIntent是如何通过HTML和JS编程实现Android平台的互操作功能。
<script>
window.onException=function(className,message){
rexseeDialog.alert("系统错误","Class:"+className+"
Error:"+unescape(message));
}
functiontakepic(){
rexseeCamera.takePicture('file:///mnt/sdcard/a.jpg',1);
}
functiononIntentCallback(origAction,origData,resultCode){
alert("onIntentCallback:\n"+origAction+"\n"+origData+"\n"+resultCode+"\nRtn:"+rexseeIntent.getData());
alert(rexseeContent.getContentData('content://media/external/image/media','_data','_id=30','',true,true));
}
functiontakevideo(){
rexseeCamera.takeVideo('file:///mnt/sdcard/b.3gp',1);
}
functiontakepicintent(){
rexseeIntent.reCreate();
rexseeIntent.setAction('android.media.action.IMAGE_CAPTURE');
rexseeIntent.startWithCallback();
}
functiontakevideointent(){
rexseeIntent.reCreate();
rexseeIntent.setAction('android.media.action.VIDEO_CAPTURE');
mImageUri='file:///mnt/sdcard/aintent.3gp';
rexseeIntent.putExtra('output','Uri',mImageUri);
rexseeIntent.startWithCallback();
}
</script>
<body>
<tablestyle="width:100%;">
<tr>
<td><buttonstyle="width:100%;height:50px;"onclick=takepic();>照相
</td>
</tr>
<tr>
<td><buttonstyle="width:100%;height:50px;"onclick=takevideo();>录像
</td>
</tr>
<tr>
<td><buttonstyle="width:100%;height:50px;"onclick=takepicintent();>照相intent
</td>
</tr>
<tr>
<td><buttonstyle="width:100%;height:50px;"onclick=takevideointent();>录像intent
</td>
</tr>
<tr>
<td><buttonstyle="width:100%;height:50px;"onclick=takeaudio();>录音
</td>
</tr>
</table>
</body>
建议直接把这段代码复制到Rexsee的在线开发环境中,效果立见:http://www.rexsee.com/project/index.php |
|