找回密码
 注册
搜索
查看: 1040|回复: 2

[讨论] 基于Rexsee的intent扩展实现Android互操作机制

[复制链接]
发表于 2012-4-10 11:20:53 | 显示全部楼层 |阅读模式
  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
发表于 2012-4-11 14:56:14 | 显示全部楼层
看不明白,我还停留在用rexsee写hello world的基础,不过着实很简单~~
点评回复

使用道具 举报

发表于 2012-4-11 10:37:47 | 显示全部楼层
超级基础的东西。。Rexsee是基于SDK做了封装实现这些扩展的?有源码可以看到么?
点评回复

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies

本版积分规则

Archiver|手机版|小黑屋|52RD我爱研发网 ( 沪ICP备2022007804号-2 )

GMT+8, 2024-12-23 17:53 , Processed in 0.043760 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表