深入浅出Oracle之ADF Mobile开发参考-Oracle EBS技术文档_第1页
深入浅出Oracle之ADF Mobile开发参考-Oracle EBS技术文档_第2页
深入浅出Oracle之ADF Mobile开发参考-Oracle EBS技术文档_第3页
深入浅出Oracle之ADF Mobile开发参考-Oracle EBS技术文档_第4页
深入浅出Oracle之ADF Mobile开发参考-Oracle EBS技术文档_第5页
已阅读5页,还剩131页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

DocRef:REFDocRefNumber<DocumentReferenceNumber>REFDocTitleOracleERP最佳实践REFLastDateMarch11,2015STYLEREFHD2DocumentControlIfSection1>1“DateAuthorVersionChangeReferenceCREATEDATE\@"d-MMM-yy"26-Apr-13Tingting.wang1.0NoPreviousDocumentReviewersNamePositionDistributionCopyNo.NameLocationNoteToHolders:Ifyoureceiveanelectroniccopyofthisdocumentandprintitout,pleasewriteyournameontheequivalentofthecoverpage,fordocumentcontrolpurposes.Ifyoureceiveahardcopyofthisdocument,pleasewriteyournameonthefrontcover,fordocumentcontrolpurposes.ContentsPAGE10DocumentControl ii1. 深入浅出ADFMobile–入门篇 21.1. ADFMobile简介 21.2. 环境搭建 31.3. HelloWorld 201.4. 应用发布 322. 深入浅出ADFMobile-基础篇 342.1. 实现简单页面展示和切换 342.2. 实现详细界面 652.3. 与服务器端交互 773. 深入浅出ADFMobile-中级篇 1023.1. 调用设备功能 1023.2. 访问设备信息 1263.3. 其他补充 1294. 深入浅出ADFMobile-高级篇 1304.1. ADFMobile架构 1301. Reference 1332. OpenandClosedIssuesforthisDeliverable 134OpenIssues 134ClosedIssues 134深入浅出ADFMobile–入门篇ADFMobile简介概述ADFMobile是一个基于HTML5和Java的框架,可以帮助开发者在一套代码库基础上构建应用程序,并部署到iOS和Android设备中。特征Java:甲骨文带来了一个嵌入式JVM,你可以使用与平台无关的、所擅长的语言来开发所有的业务逻辑,甚至是iOS应用。JDBC:提供了JDBC以及SQLite驱动、引擎,此外还支持加密功能。多平台:一次开发,多处部署,支持iOS、Android手机和平板电脑。灵活:你可以决定如何实现UI,比如你可以使用内置的HTML5组件或JSF、jQuery框架等。使用设备功能:你可以使用Java或JavaScript来调用设备功能,如摄像头、GPS、电子邮件、短信、联系人等。安全:无论你使用远程URL,还是本地HTML或AMX,你都可以确保使用统一的登录页面来访问所有功能。快速:你可以使用现有的Java开发技术,无需学习其他语言,即可快速创建移动应用。当然,不可能只有优势多平台差异化(系统版本、屏幕大小等)可能造成程序需要考虑兼容性,也为测试增加了工作量。平台升级可能造成程序无法使用,需要及时更新、跟上节奏。相对PC,对代码的效率要求更高。框架结构ADF移动应用在本地设备上安装和运行,并支持离线操作。支持多种移动场景,运行架构灵活。ADFMobile框架结构图如下:本地移动设备开发人员可以通过HTML5或者JavaScript来构建界面,这样虽然比使用XML格式更复杂,但是它使得用户界面更灵活、更人性化。可以通过JavaScript访问远程设备,也可通过JVM的Web服务请求和离线支持访问的SQLite等服务。远程服务器远程服务器主要包含一些页面和服务,以响应客户端发送的请求。Orcale提供了webLogic集成方案,当然也可以使用其他第三方架构。交互通信ADFMobile通过封装XML的方式与服务器进行交互。也支持使用JavaBeans、SOAP/RESTweb等方式与企业集成系统进行交互通信。学习基础SQL、PL/SQL基础呵呵,不解释。JAVA基础ADFMobile技术采用的是JAVA开发语言,所以在您学习ADFMobile之前,必须先掌握JAVA开发语言的基础知识JavaScript基础了解JavaScript即可,比较简单,之前没接触过也没关系,上手快。XML基础OAF中大量使用XML来完成配置,包括页面配置、数据交合等等,但是XML结构非常简单,ADFMobile中也不用手动编写,看懂即可。环境搭建安装JDeveloper11g或者12c此版本均可,下载地址为/technetwork/developer-tools/jdev/downloads/index.html下载后解压文件,获得如下文件,我的版本是.0,目录是D:\JDeveloper11124执行cmd命令,进行安装,需要JDK版本6.0Update21及以上java-jarjdevstudio11124install.jar修改目录D:\Oracle\Middleware11124选择JDK目录一路默认值,进行安装安装完成后启动JDeveloper安装ADFMobile组件ADFMobile开发工具是以JDeveloper插件形式,需要下载安装,JDeveloper提供了自动安装工具。打开JDeveloper,Help>CheckforUpdates选择默认值勾选ADFMobile,系统会自动筛选可用版本Next,同意协议,进行更新。如果下载较慢,也可以通过另一种方式,先下载好更新文件,下载地址/ocom/groups/public/@otn/documents/webcontent/131167.xml#oracle.adf.mobile然后在第二步的时候选择本地文件安装成功的验证方式新建Application,对话框出现MobileApplication安装Android模拟器下载模拟器,地址是/sdk/index.html(如果打不开,使用翻墙软件,呵呵呵~~)下载后运行exe程序进行安装,一路默认值就可以了安装好后打开,点击Configure然后打开SDKManager,配置一个我们需要的Android模拟器选择Tools>ManageAVDs,配置一个模拟器如果没有就新增一个,有则点击Edit更新配置设置内存点击OK后,主界面点击Start,Launch,运行模拟器,大概需要两分钟运行出来的界面。大部分测试都可以在模拟器上进行,避免不良代码造成真机损害,测试通过后可以生成apk文件,安装到真机测试。配置JDeveloper,就可以在JDeveloper中直接部署,不需要手动输命令打开JDeveloper,Tools>Preferences左侧选择ADFMobile下的Platforms,右侧选择Android,设置模拟器路径信息点击OK,设置完成。生成Keystore本步骤的主要目的是为应用生成一个虚拟的数字签名,所有的应用都需要有自己的签名才能进行发布,比如公司、地区、国家等等信息都保存在此并加密。我们使用JDK即可生成。进入java安装目录bin,我的是C:\ProgramFiles\Java\jdk1.7.0_25\bin执行生成命令,employees.keystore为keystore文件名称,大小2048B,有效期10000天keytool-genkey-v-keystoreemployees.keystore-aliasemployees-keyalgRSA-keysize2048-validity10000并依次输入初始信息,我的输入是:密钥口令:111111名字:GaryWilliams组织单位名称:Oracle组织名称:Oracle城市:Houston省/市/自治区:Texas国家:US然后确认,输入“是”生成成功后会在当前目录看到文件employees.keystore打开JDeveloper,Tools>Preferences左侧选择ADFMobile下的Platforms,右侧选择Android,下方切换到Release输入Keysore位置以及密码,这样JDeveloper在发布应用的时候就使用该keystore点击OK,设置成功HelloWorld先睹为快做一个最简单的HelloWorld,部署应用到模拟器,打开模拟器的APP所有应用,出现如下APP图标点击APP,使之运行,出现页面创建Application打开JDeveloper,左侧点击NewApplication选择MobileApplication(ADF)名称输入MyMobileApp,下一步ProjectName输入ApplicationController两次下一步,ProjectName输入ViewController点击Finish,创建好一个Application一个应用包含两个Project,创建好的两个Project类似于后端(ApplicationController)和前端(ViewController)。adfmf-feature.xml是XML格式的配置文件,它定义了屏幕显示的方式,包括每个页面的图标、内容等以及各个页面之间的关系流程,是View层最核心的文件。创建HTML页面右键ViewControllerproject,选择New左侧选择WebTier下的HTML,右侧选择HTMLPage输入文件名称,点击OK页面输入DeploymentSuccessful,调整字体大小添加页面到UI做好HTML页面后,要将页面添加到View层,也就是在adfmf-feature.xml中应用HTML文件,JDeveloper提供了图形化编辑界面。在导航窗口,找到adfmf-feature.xml配置文件双击adfmf-feature.xml打开文件点击Features栏的添加图标FeatureName输入Success,featureID输入oracle.success,点击OK,保存。这里解释一下,每个Feature类似于一个容器,其下由导航、主内容、约束、安全性等组成,不过用的最多的是Content,在12C的JDeveloper版本中已经去掉了几个,内容可以由多个画面组成,画面有不同的类型,HTML,ADFAMX等。点击Content栏的添加图标,默认添加一条ID为oracle.success.1的数据Type选择LocalHTML,URL栏选择选择新建的HTML页面,保存发布应用到模拟器首先要保持模拟器在开启状态,JDeveloper里选择Application>Deploy>NewDeploymentProfile,设置配置信息ProfileType选择ADFMobileforAndroid,DeploymentProfileName输入Android_Mobile_Native_archive1点击OK弹出的对话框选择AndroidOptions,设置运行参数保存信息。JDeveloper菜单选择Application>Deploy>Android_Mobile_Native_archive….弹出的对话框选择Deployapplicationtoemulator,点击Finish可以通过查看下方的DeploymentLog窗口来查看发布日志和错误信息,发布需要一段时间发布成功后可以查看运行效果。几个问题发布过程遇到问题如下:查询后得知是缺少了文件,下载地址/android/repository/gcm_r03.zip下载后解压,放到AndroidSDK安装目录\Android\sdk\extras\google下重命名为gcm发布的时候遇到如下问题信息显示,签名有问题,经过查找,是1.7版本的JDK在生成签名时经过SHA1校验解决如下:首先执行cdC:\ProgramFiles\Java\jdk1.7.0_25\binjarsigner-sigalgMD5withRSA-digestalgSHA1-verbose-keystoreemployees.keystore-storepass111111-keypass111111D:/ADF_MOBILE/MyMobileApp/deploy/Android1/MyMobileApp.apkemployees然后手动发布cdD:/ProgramFiles/Android/sdk/platform-toolsadb-einstall-rD:/ADF_MOBILE_12c/MyMobileApp/deploy/Android1/MyMobileApp.apk应用发布导出JDeveloper可以直接将app打包安装到设备,在部署的时候,选择发布到设备即可。如果已经发布过,本机文件已经存在apk文件,默认路径为MyMobileApp\deploy\Android1\MyMobileApp.apk安装通过数据线连接设备,将apk文件安装即可。深入浅出ADFMobile-基础篇实现简单页面展示和切换先睹为快如下为员工页面展示点击左上角Graph,可以返回到柱状图展示新建Application比较简单,不多赘述。ApplicationName输入EmployeesApplicationPackagePrefix输入mycomp点击Next,ProjectName采用默认值ApplicationController下一步,PackageName采用默认值下一步,依然采用默认值,添加了前缀的好处就是系统可以自动识别并给出合理的名称下一步,完成创建好应用,如图配置UI界面首先添加一个HTML界面,用来显示帮助,比较简单打开adfmf-feature.xml文件,Features栏点击添加按钮FeatureName输入Employees,点击OKFeatures栏点击添加按钮,FeatureName输入Help,新建后在Content栏选择添加按钮,新增的mycom.help.1的Type选择LocalHTML类型URL栏点击新增按钮,新增一个Help.html的页面点击OK后,打开help.html页面,内容输入“ThisdocumentwillbetheHelpSystem”返回到adfmf-feature.xml,我们添加员工界面,由两部分(List和)组成在Features栏选择Employees,其下的Content栏数据选择ADFMobileAMX类型创建ADF流程图多个界面在互相切换的时候,要指明流程。JDeveloper提供了可视化工具进行设置,使得开发比较容易,也更直观。打开adfmf-feature.xml,选中Features栏发Employees,选中其下Content栏的mycomp.Employees.1,在File栏右侧点击添加按钮,选择TaskFlowFileName命名为EmpsTaskFlow.xml,点击OK在JDeveloper右侧,拖拽view到EmpsTaskFlow将其命名为empList相同方式,再新建一个名称为graph的View二者建立连接,单击右侧的ControlFlowCase然后先单击empList,在单击graph将其命名为showGraph选中showGraph,在右侧会出现其属性,更改Transition属性为flipRight至此,流程图新建完成,保存创建java类和数据控制Employee是个对象,需要新建对应的java类,以及管理Employees的类右键ViewController,选择New选择JavaClass点击OK将类命名为Emp,点击OK添加属性privateStringname;

privateStringemail;

privateintsalary;

privateDatehireDate;添加两个构造方法publicEmp(Stringname,Stringemail){

super();

=name;

this.email=email;

}

publicEmp(Stringname,Stringemail,intsalary,DatehireDate){

super();

=name;

this.email=email;

this.salary=salary;

this.hireDate=hireDate;

}右键,选择GenerateAccessors,生成getter和setter方法选择全部属性,点击OK同样的方法,生成Emps类,这个类对emp进行管理在Emps里添加两个方法packagemycomp.mobile;

importjava.util.ArrayList;

importjava.util.Calendar;

importjava.util.Date;

importjava.util.List;

publicclassEmps{

privateLists_emps=null;

publicEmps(){

super();

}

publicEmp[]getEmps(){

//ThisMethodgetsalistoftheemployeesandtheiremails

Emp[]emps=null;

s_emps=newArrayList();

s_emps.add(newEmp("Bill","bill@",4000,getADate(2011,3,24,9,0)));

s_emps.add(newEmp("Gary","gary@",5000,getADate(2007,2,24,9,0)));

s_emps.add(newEmp("Jeff","jeff@",5500,getADate(2003,2,19,9,0)));

s_emps.add(newEmp("Joe","joe@",4000,getADate(2012,2,13,9,0)));

s_emps.add(newEmp("Shay","shay@",6000,getADate(2002,2,21,9,0)));

emps=(Emp[])s_emps.toArray(newEmp[s_emps.size()]);

returnemps;

}

privateDategetADate(inty,intm,intd,inth,intmi){

Calendarc1=Calendar.getInstance();

c1.set(y,m,d,h,mi);

DateretDate=c1.getTime();

returnretDate;

}

}保存,Build>RebuildViewController.jpr,编译当前的文件右键Emps.java,选择CreateDataControl保存添加数据控制到ADF流程打开EmpsTaskFlow.xml双击empList,打开设置界面,选择所有的pagefacets,点击OK使用拖动栏将编辑器分为两部分,便于及时查看界面将右侧编辑切换到Preview页将outputText属性设置为EmpList选中id为cb1的button,在右侧的属性界面,设置Text属性为Graph,设置Action为showGraph在左侧导航栏,展开DataControls,拖拽emps到empList.amx下的PanelPage选择ADFMobileListView弹出的对话框,是选择界面的样式,选择简单样式即可,Variations选择第二个点击OK,进入到View编辑界面,设置DividerMode为FirstLetter,点击OK在EmpsTaskFlow上双击graphview,打开编辑界面选中所有的PageFacets,点击OK使用拖动栏将编辑器分为两部分,右侧切换到Preview页面选中id为cb1的button,在右侧的属性界面,设置Text属性为back,设置Action为__back同样方式,将emps拖拽到graph.amx下的PanelPage,选择ADFMobileChart选择界面类型,左侧选择Bar,点击OK拖拽salary到Bars,拖拽name到XAxis,点击OK.保存当前工作。部署和测试接下来我们将app部署到模拟器,并且进行测试在菜单上找到Applicationmenu,选择Deploy>NewDeploymentProfile选择ADFMobileforAndroid,点击OK单击AndroidOptions,BuildMode选择Release,点击OK在Application菜单,选择Deploy>Android2选择Deployapplicationtoemulator,点击Next点击完成,开始部署查看log,部署成功。打开模拟器,进入应用,打开刚刚部署好的app测试成功实现详细界面先睹为快员工List界面点击右侧“>”后,显示详细界面将List界面转换为导航界面打开文件empList.amx,拖拽一个PanelSplitter组件到PanelPage展开PanelSplitter其下包含Facet-navigator和PanelItem组件拖拽ListView到Facet–navigator组件下从DataControls面板拖拽emps到PanelItem然后选择Form>ADFRead-onlyForm在FormFileds界面,保持默认值,点击OK添加按钮监听拖拽一个SetPropertyListener组件到ListItem在属性界面,设置三个属性,Form,To和Type分别设置为:#{row.rowKey},#{pageFlowScope.empId},action展开Emps>Operations,其下为左右可操作动作拖拽setCurrentRowWithKey到ListItem,然后选择operation>ADFMobileButton弹出的对话框中,将Parameters下的value设置为#{pageFlowScope.empId},点击OK打开empList.amx的代码,将刚刚添加的按钮Listner拖拽带id为li1的ListItem上然后删除按钮保存并部署到模拟器,测试与服务器端交互先睹为快打开APP,进入员工详细界面点击Update按钮,进入员工更新界面修改信息后,点击SalaryUpdate按钮更新成功创建更新界面打开文件EmpsTaskFlow.xml,添加两个View,分别命名为SalaryUpgrade和TakePicture使用ControlFlow连接empList和SalaryUpgrade,将其命名为goWS连接empList和TakePicture,将其命名为takePicture创建服务首先得有一个服务器提供服务,以响应来自客户端的请求,然后再返回相应的回应。我们使用WebLogic这个中间件来提供webservice服务。下载一个WS模板,地址为/cd/E18941_01/tutorials/buildmobileappscontent/labs/samplews.zip将其解压到JDeveloper的myWork目录用JDeveloper打开,File>Open,选择SampleWS.jws在JDeveloper中展开该Application,右键Service.java,点击Run如果是第一次运行,会弹出WebLogicServer(WLS)的初始化设置界面,输入初始密码,点击OK。第一次运行需要一点时间。查看log,有如下信息说明发布成功点击链接,可以打开webservice的请求界面,说明已经建立好webservice复制webservice的WSDLURL切换Application到Employees右键ViewController,选择New弹出的对话框,选择BusinessTier>DataControls>WebServiceDataControl,点击OK下一步,创建webservice的数据控制,名称命名为SalaryService,URL输入第六步生成的URL,需要注意的是,ip地址不能写或者localhost,因为是两个设备,所以要修改为电脑本地的IP,可以通过ipconfig命令查看选择SalaryUpgrade方法,将其选到右侧,点击Finish保存当前工作调用服务服务已经建立好,我们接下来在客户端添加调用服务的方法,来访问服务。打开文件EmpsList.amx,和之前一样,将编辑窗口分为两部分,分别查看代码和界面选择iPad模式,可以扩大编辑窗口选中id为cb2的按钮(在界面右上角),设置其Text为Update,Action为goWS保存当前进度,打开文件EmpsTaskFlow.xml,双击SalaryUpgrade创建一个默认page将emps数据拖拽到SalaryUpgrade.amx下的PanelPage,选择ADFMobileForm只留下属性Name和Salary,点击OK在BindingsandExecutables子页面,点击Bindings右侧的添加按钮,添加一个调用服务器的action弹出的对话框选择actionInterator选择empsIterator,Operation选择setCurrentRowWithKeyValue,rowKey的值设置为#{pageFlowScope.empId},点击OK点击Executables右侧的添加按钮选择invokeAction,点击OK设置id为setEmpId,Binds为setCurrentRowWithKeyValue调整此方法到第一步,执行时第一个执行保存工作。打开文件SalaryUpgrade.amx,在左侧DataControls下,拖拽SalaryUpgrade方法到SalaryUpgrade.amx下的PanelPage,选择ADFMobileButtonName和Sal的值输入绑定值,#{.inputValue}和#{bindings.salary.inputValue},date和comm是选择获得的,分别输入#{viewScope.start}和#{viewSmission}保存当前进度。接下来添加一个选择“是否”的控件拖拽一个Switch(boolean)控件到SalaryUpgrade.amx下的PanelFormLayout将其label属性设置为Commissioned?,Value属性设置为#{viewSmission}保存,再添加一个选择日期的控件拖拽一个InputDate组件到PanelFormLayout设置其属性,label属性为Starting,Value为#{viewScope.start}展开DataControls下的SalaryService,可以看到其返回值为String,将其拖拽到SalaryUpdate.amx下的PanelPage,选择ADFMobileOutputText,这个会服务器的输出信息展现在客户界面保存当前进度。接下来,控制输出结果是否显示。我们设置为点击UpdateSalary按钮后,控件可以显示。设置刚刚添加的Text的属性,Rendered属性设置为#{viewScope.displayResults=='Y'}然后点击按钮的时候,将变量viewScope.displayResults设置为Y。拖拽一个SetPropertyListener组件到theSalaryUpgrade按钮设置如下属性From:#{'Y'}To:#{viewScope.displayResults}Type:action设置id为cb1的属性,Text为Back,Action为__back,可以后退打开文件EmpsTaskFlow,双击TakePicture,为其新增一个默认界面保存当前进度,部署到服务器测试。此处略,详见此节开始”先睹为快”。深入浅出ADFMobile-中级篇调用设备功能调用相机打开文件EmpTaskFlow.xml,双击EmpList拖拽一个Button组件到PanelItem将其Text设置为“TakeaPicture”,Action设置为takePicture双击TakePicture.amx,打开页面修改标题为“TakeaPicture”在DataControls面板展开DeviceFeatures,可以看到一个方法是getPicture(int,int,int,boolean,int,int,int)将其拖拽到PanelPage然后选择ADFMobileButton在属性设置界面,输入以下值,设置大小,点击OK,保存。(参数的解释在下一节)接下来将其绑定到方法getPicture的返回值上,将getPicture的返回值String拖拽到PanelPage,然后选择Text>ADFMobileOutputText拖拽一个Image组件到PanelPage切换到TakePicture.amx的代码tab页,将ot2的value值拷贝到i1上删除outputText字段选中Facet–primary下的Button,设置属性Text为Back,Action为__back保存工作,将其部署到模拟器上,运行测试点击按钮后,出现由于虚拟机没有摄像头,所以想要真正测试,还得打包安装到正式机子上。访问相册上一步调用相机功能使用了一个方法,getPicture(int,int,int,boolean,int,int,int),我们分别对其设置了参数,先解释一下参数的意义名称含义说明quality画质0到100destinationType来源路径Camera.DestinationType={DATA_URL:0,FILE_URI:1};sourceType来源类型Camera.PictureSourceType={PHOTOLIBRARY:0,CAMERA:1,SAVEDPHOTOALBUM:2};allowEdit是否允许修改encodingType文件格式Camera.EncodingType={JPEG:0,PNG:1};targetWidth宽度(像素)targetHeight高度(像素)所以如果想从相机选取一个之前已经拍摄的照片,将参数sourceType设置为2即可,就会选取已相册的图片效果图(pad真机测试图)另外,对应不同的设备,参数略有区别,具体可参考/en/1.0.0/phonegap_camera_camera.md.html#camera.getPicture/cd/E37975_01/apirefs.111240/e27204/index.html?javax/el/MethodExpression.html对应所有的api都是这样,之后不再重复说明发送邮件打开TakePicture.amx,拖拽一个button到界面设置按钮属性,Text为SendEmail在Action下拉条,找到点击Edit,新增一个自己的action来监听按钮点击New新建界面,设置属性BeanName:backingPicClassName:BackingPicScope:view点击OK后,回到上一个界面,点击Method后的New设置名称为sendEmail点击OK,可以看到,新建了一个名为BackingPic.java的类,双击打开,有sendEmail方法在sendEmail方法添加代码保存,部署到模拟器,测试点击sendEmail按钮出现界面创建联系人与之前类似,新建一个button,并且绑定自己的java控制bean,类名为BackingContacts,方法名为createContacts双击打开文件BackingContacts.java在createContacts方法里添加如下代码在ApplicationResources面板,展开Descriptors>ADFMETA-INF,双击打开文件maf-application.xml左侧选择Plugins,勾选Contacts,允许该程序访问通讯录保存,部署,测试。对于iOS系统,系统还会校验,会弹出选OK,允许访问,然后去通讯录查看,可以看到Gary已经添加发送推送通知与上一节类似,发送推送通知也使用自建的方法。与之不同的是,ADF没有提供标准方法,需要我们自己新建一个通知bean,包含私有属性和推送方法,具体详细案例可参考JDeveloper自带案例(PushServer和PushDemo)。新建MessageBean,包含私有属性message、deviceType等。分别编写android和ios的推送方法对于android,使用Sender和FacesMessage这个内置类,设置消息等属性,推送出去privatevoidpushMessageAndroid()throwsException{Sendersender=newSender(GOOGLE_APIKEY);Messagemessage=newMessage.Builder().addData("alert",this.getMessage()).addData("sound","default").addData("badge","1").build();StringregId=getValueFromEL("#{bindings.deviceToken.inputValue}");try{Resultres=sender.send(message,regId,5);//发送并获取信息Stringid=res.getMessageId();StringcregId=res.getCanonicalRegistrationId();StringerrorCode=res.getErrorCodeName();StringretMsg="Messagepushed:Id:"+id+";CRegId:"+cregId+";ErrorCode:"+errorCode;showResponse(retMsg);//展示信息}catch(Exceptione){e.printStackTrace();throwe;}}privatevoidshowResponse(Stringmsg){FacesMessagefm=newFacesMessage(FacesMessage.SEVERITY_INFO,msg,"");FacesContextfctx=FacesContext.getCurrentInstance();fctx.addMessage(null,fm);}对于ios系统,使用PushApns这个类进行发送,privatevoidpushMessageIOS()throwsException{StringregId=getValueFromEL("#{bindings.deviceToken.inputValue}");//生成json格式的消息Stringmessage="{\n"+"\"aps\":\n"+"{\n"+"\"alert\":\""+this.getMessage()+"\",\n"+"\"sound\":\"default\",\n"+"\"badge\":1\n"+"}\n"+"}";newPushApns(IOS_KEYFILE,IOS_KEYPWD,PROXY_HOST,PROXY_PORT).sendString(regId,message);} 对于iso推送,更详细的说明可参考/library/mac/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/Chapters/ApplePushService.html发送短信发送短信与调用相机功能类似,都是调用了系统的标准功能,不需要自己画界面,传入参数即可。打开文件EmpList.amx,拖拽一个Button组件到PanelItem,设置text属性在DataControls面板展开DeviceFeatures,可以看到一个方法是sentSMS(String,String),拖拽到PanelPane然后选择ADFButton,弹出的对话框里,to表示电话号码,body表示短信内容,都会以参数形式传入短信发送界面,可以为空,也可以绑定一个变量点击OK,打开源代码,可以看到生成了一个commandButton,将其actionListener和disabled属性拷贝到之前新增的button上,然后删除commandButton完成,测试。设置图标很多图标想要做的美观一些,需要借助图片来展示,接下来将之前的几个button设置图标先从以下网址下载示例图标/cd/E53569_01/tutorials/tut_jdev_maf_app/labs/icons.zip将zip文件解压到Employees/ViewController/public_html目录打开文件maf-features.xml,选中Employees,将navigationBarIcon和SpringboardImage属性都设置为icons/func_orgchart_32@2x.png同样的,将Help的NavigationBarIcon和SpringboardImage设置为icons/func_questionmark_32@2x.png将Camera的NavigationBarIcon和SpringboardImage设置为icons/func_camera_32@2x.png将Contacts的NavigationBarIcon和SpringboardImage设置为icons/navb_team01_32@2x.png然后部署,测试访问设备信息获取GPS定位信息ADFmobile提供了类,oracle.adf.model.datacontrols.device.Location,该类有很多get方法,可以保存当前的位置信息。这里以JDeveloper提供的Demo为例,路径为\jdeveloper\jdev\extensions\oracle.maf\Samples\DeviceDemo新建class类,GPSBean,包含私有变量(经度、纬度、高度)和公用方法(更新位置方法)。由于位置是不停在改变的,所以需要定时调用,来不断更新。创建页面(GPS.amx)和对应的TaskFlow.xml,将GPSBean绑定到GPSBeanIterator上,用以调用在页面secondary上新建两个按钮,一个是开始,一个是停止,分别绑定GPSBean的startLocationMonitor和stopLocationMonitor方法在页面panelFormLayout上新建input,用以暂时输出结果文件管理ADFmobile读写文件与普通的方法类似,也是使用输入输出流,也是利用java.io.File这个类//获取ClassLoaderClassLoadercl=Thread.currentThread().getContextClassLoader();//获取文件路径和句柄StringoutFile=AdfmfJavaUtilities.getDirec

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论