http://blog.csdn.net/laorenshen/article/details/41148253

学习使用Delphi for android 调用Java类库

2014-11-15 18:36 1053人阅读 评论(0) 收藏 举报
 分类:
安卓开发(27) 

Android是一套非常优秀的移动端操作系统,Delphi Xe5中也能直接调用SDK中提供的各项API,但是delphi自己封装的AndroidAPI非常少,在安装目录的 source\rtl\android 中,而且所提供的android API也没有明确sdk版本区别,很多事情都得我们自己来封装了完成。

在Delphi中将java类的通过接口进行包装,分为类方法接口及类实例方法接口两个部分,然后通过一种工厂方法将这两种接口混合起来,对外提供统一的java实例服务;

类方法:顾名思义就是属于类本身,不依赖类实例化就可调用的方法,类方法包装,主要是指包装java中静态属性,静态方法,构造方法(构造函数包装需要将构造函数命名为init,缺省是一个,也可以多个或者没有);

类实例:就是依赖实例化类后才能调用的方法;

有了上面的概念,下面针对java的接口包装及类包装分别进行说明,所引用的代码为Jeff编写的android API 19 的语音朗读引擎接口包android.speech.tts.TextToSpeech的Delphi实现Androidapi.JNI.TTS.pas;

l 接口(java)

1. 类方法包装(继承IJavaClass)

JTextToSpeech_OnInitListenerClass = interface(IJavaClass)

['{58D32EFB-6528-4EC6-BA4F-28B22FE8E573}']

end;

注意命名规范,这样利于你,也利于大家J打头Class结尾,大小写保持后Java一致

2. 实例方法包装(继承IJavaInstance)

[JavaSignature('android/speech/tts/SynthesisCallback')]

JSynthesisCallback = interface(IJavaInstance)

['{190C13DE-BC7E-44CE-94F6-4AF1A84A4612}']

function audioAvailable(buffer: TJavaArray<byte>; offset: Integer; length: Integer): Integer; cdecl;

function done: Integer; cdecl;

procedure error; cdecl;

function getMaxBufferSize: Integer; cdecl;

function start(sampleRateInHz: Integer; audioFormat: Integer; channelCount: Integer): Integer; cdecl;

end;

TJSynthesisCallback = class(TJavaGenericImport<JSynthesisCallbackClass, JSynthesisCallback>) end;

注意命名规范前面加J, 大小写保持后Java一致;

注意自定义标签写法

[JavaSignature('android/speech/tts/SynthesisCallback')]

3. 工厂类及delphi封装的调用类

TJSynthesisCallback = class(TJavaGenericImport<JSynthesisCallbackClass, JSynthesisCallback>) end;

注意以T打头;

l 类(java)

1. 类方法包装(继承JObjectClass)

2. 实例方法包装(继承JObject)

3. 工厂类及delphi封装的调用类与接口相同;

Java类中各类型Delphi在Androidapi.JNI.JavaTypes也做了相应的封装,也有相应对照表在源码注释中,可对照参考

JObject = interface;//java.lang.Object

JClassLoader = interface;//java.lang.ClassLoader

JInputStream = interface;//java.io.InputStream

JByteArrayInputStream = interface;//java.io.ByteArrayInputStream

JNumber = interface;//java.lang.Number

JInteger = interface;//java.lang.Integer

JBoolean = interface;//java.lang.Boolean

JByte = interface;//java.lang.Byte

JEnumeration = interface;//java.util.Enumeration

JCalendar = interface;//java.util.Calendar

JAbstractCollection = interface;//java.util.AbstractCollection

JAbstractSet = interface;//java.util.AbstractSet

JHashSet = interface;//java.util.HashSet

JAbstractList = interface;//java.util.AbstractList

JSerializable = interface;//java.io.Serializable

JEnum = interface;//java.lang.Enum

JThread_State = interface;//java.lang.Thread$State

JThread_UncaughtExceptionHandler = interface;//java.lang.Thread$UncaughtExceptionHandler

JFileDescriptor = interface;//java.io.FileDescriptor

JFile = interface;//java.io.File

JArrayList = interface;//java.util.ArrayList

JRunnable = interface;//java.lang.Runnable

JCloseable = interface;//java.io.Closeable

JWriter = interface;//java.io.Writer

JIterable = interface;//java.lang.Iterable

JCollection = interface;//java.util.Collection

JList = interface;//java.util.List

JOutputStream = interface;//java.io.OutputStream

Jlang_Class = interface;//java.lang.Class

JThrowable = interface;//java.lang.Throwable

JException = interface;//java.lang.Exception

JJSONException = interface;//org.json.JSONException

JUUID = interface;//java.util.UUID

JAbstractMap = interface;//java.util.AbstractMap

JHashMap = interface;//java.util.HashMap

JRandom = interface;//java.util.Random

JAnnotation = interface;//java.lang.annotation.Annotation

JThread = interface;//java.lang.Thread

JDate = interface;//java.util.Date

JFilterOutputStream = interface;//java.io.FilterOutputStream

JPrintStream = interface;//java.io.PrintStream

JRuntimeException = interface;//java.lang.RuntimeException

JObserver = interface;//java.util.Observer

JFloat = interface;//java.lang.Float

JDouble = interface;//java.lang.Double

JPrintWriter = interface;//java.io.PrintWriter

JIterator = interface;//java.util.Iterator

JListIterator = interface;//java.util.ListIterator

JByteArrayOutputStream = interface;//java.io.ByteArrayOutputStream

JStackTraceElement = interface;//java.lang.StackTraceElement

JFileOutputStream = interface;//java.io.FileOutputStream

JAbstractStringBuilder = interface;//java.lang.AbstractStringBuilder

JStringBuilder = interface;//java.lang.StringBuilder

JCharSequence = interface;//java.lang.CharSequence

JGregorianCalendar = interface;//java.util.GregorianCalendar

JJSONTokener = interface;//org.json.JSONTokener

JMap = interface;//java.util.Map

JLocale = interface;//java.util.Locale

JTimeZone = interface;//java.util.TimeZone

JFileFilter = interface;//java.io.FileFilter

JEnumSet = interface;//java.util.EnumSet

Jutil_Observable = interface;//java.util.Observable

JFilenameFilter = interface;//java.io.FilenameFilter

JJSONObject = interface;//org.json.JSONObject

JString = interface;//java.lang.String

JSet = interface;//java.util.Set

JShort = interface;//java.lang.Short

JThreadGroup = interface;//java.lang.ThreadGroup

JComparator = interface;//java.util.Comparator

JJSONArray = interface;//org.json.JSONArray

JLong = interface;//java.lang.Long

JFileInputStream = interface;//java.io.FileInputStream

JStringBuffer = interface;//java.lang.StringBuffer

此单元也包含了部分转换函数如StringToJString 各位可以跟进源码察看;

l 如何调用

直接看代码把

var

text : JString;

begin

tts := TJTextToSpeech.JavaClass.init(SharedActivityContext, ttsListener);

text := StringToJString('hello!');

tts.speak(text, TJTextToSpeech.JavaClass.QUEUE_FLUSH, nil);

end;

学习使用Delphi for android 调用Java类库的更多相关文章

  1. Delphi XE5 for android 调用Java类库必看的文件

    C:\Program Files\Embarcadero\RAD Studio\12.0\source\rtl\android 的目录 Androidapi.AppGlue.pasAndroidapi ...

  2. php通过JavaBridge调用Java类库和不带包的自定义java类成功 但是调用带包的自定义Java类报错,该怎么解决

    php通过JavaBridge调用Java类库和不带包的自定义java类成功 但是调用带包的自定义Java类报错,Class.forName("com.mysql.jdbc.Driver&q ...

  3. Android调用Java WebSevice篇之一

    一.服务端WebService 1.服务端环境配置          MyEclipse 10.0.Tomcat6.0.JDK6.0. 2.下载axis相关jar包. 3.创建webservice. ...

  4. Android NDK 学习之在C中调用Java的变量和静态变量

    本博客主要是在Ubuntu 下开发,且默认你已经安装了Eclipse,Android SDK, Android NDK, CDT插件. 在Eclipse中添加配置NDK,路径如下Eclipse-> ...

  5. Android(java)学习笔记54:Android 调用Vibrator震动功能

    1. 之前我编写的代码是如下: package com.himi.vibrate; import android.app.Activity; import android.app.Service; i ...

  6. Delphi XE5 Android 调用 Google ZXing

    { Google ZXing Call demo Delphi Version: Delphi XE5 Version 19.0.13476.4176 By: flcop(zylove619@hotm ...

  7. delphi xe5 android 调用照相机获取拍的照片

    本篇文章我们来看一下delphi xe5 在android程序里怎样启动照相机并获取所拍的照片,本代码取自xe自带打sample,路径为: C:\Users\Public\Documents\RAD ...

  8. Android调用Java WebSevice篇之二

    1.创建Activity. package com.web; import org.ksoap2.SoapEnvelope; import org.ksoap2.serialization.SoapO ...

  9. 2.7 学习总结 之【Android】java To Kotlin 一(初识)

    一.Kotlin 的方便之处 1.Kotlin 可以直接使用id来呼叫操控相应的控件( textView.text = "0" )   java( TextView textVie ...

随机推荐

  1. SpringBoot(三) -- SpringBoot与日志

    一.日志的起源 现在假设一个开发人员在开发一个大型系统,由于这个系统过于庞大没在很多的地方将关键的数据使用System.out.println()打印,但是当我们在项目正式上线时又需要去除,在项目bu ...

  2. Spring MVC-学习笔记(5)spring MVC的文件上传、下载、拦截器

    1.文件上传.      spring MVC为文件上传提供了直接的支持,这种支持是即插即用的MultipartResolver(多部分解析器)实现的.spring MVC使用Apache Commo ...

  3. Mybatis中SqlSessionFactory和SqlSession学习和原理

    源码git地址:https://github.com/mybatis/mybatis-3 目标结构: mybatis是数据持久化解决方案将用户从JDBC访问中解放出来,用户只需要定义需要操作的SQL语 ...

  4. Java学习day10-面向对象特征之一:封装和隐藏

    一.包package和引用import 1.关键字package package语句作为Java源文件的第一条语句,指明该文件中定义的类所在的包(若缺省该语句,则指定为无名包).包的存在是为了区别同名 ...

  5. Spring Cloud部署+Mybatis整合

    一:架构简介 Spring Cloud是微服务思想的体现.每个项目单独部署,我只需要知道你服务的name就能直接调用你,而不关心你的ip和端口的变化.当接口服务不可用的时候,我能感知到你无法用了,就不 ...

  6. [2019杭电多校第一场][hdu6579]Operation(线性基)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6579 题目大意是两个操作,1个是求[l,r]区间子序列的最大异或和,另一个是在最后面添加一个数. 如果 ...

  7. Vue组件通信方式(一)

    组件与组件的关系,通常有父子关系,兄弟关系以及隔代关系. 针对不同的场景,如何选用适合的通信方式呢? (一) props/$emit parentComponent ==> childCompo ...

  8. 【Matlab技巧】工作区变量如何添加到Simulink中?

    对新手来说,在进行simulink仿真时想把工作区的变量添加到Simulink中,这样在如transfer模块中使用时可以直接输变量即可. 如这样: 那么如何对Simulink仿真文件自动赋值呢? 1 ...

  9. [环境搭建]-Web Api搭建到IIS服务器后PUT请求返回HTTP Error 405.0 - Method Not Allowed 解决方法 转摘:http://blog.csdn.net/qiujuer/article/details/23827531

    尝试使用微软的Web Api,他的确是一个很有意思的东西. 让我体会到了许多的方便,但是我发现部署到IIS服务器上去了后PUT和Delete请求将返回405. 原因是IIS的默认处理程序默认情况下只允 ...

  10. SSM商城系统开发笔记-配置01-web.xml

    先占坑 慢慢填, 商城系统使用主体框架:Spring + Spring MVC + Mybatis 其他框架: 日志: slf4j + logback <!DOCTYPE web-app PUB ...