SL4A - 快速指南


SL4A - Android 概述

Android 是一个基于 Linux 的操作系统,主要为智能手机和平板电脑等便携式设备设计。Android 不仅仅是一个操作系统。它是一个为用户、开发人员和制造商提供许多功能的软件堆栈。

安卓版本 特征
安卓(阿尔法)1.0 Android 的第一个版本
安卓 1.5(纸杯蛋糕) 添加自动旋转选项,在网络浏览器中添加复制和粘贴功能
安卓 1.6(甜甜圈) 添加了语音搜索和搜索框
Android 2.0/2.1(闪电泡芙) 蓝牙2.1支持
安卓2.2/2.2.3(弗罗约) 支持 Adob​​e Flash 10.1
Android 2.3/2.3.7(姜饼) 互联网通话、一键选词和复制/粘贴
Android 3.0/3.2.6(蜂窝) 该版本仅适用于平板电脑。功能包括支持多核处理器、加密所有用户数据的能力
Android 4.0/4.0.4(冰淇淋三明治) UI 中的虚拟按钮,能够关闭在后台使用数据的应用程序
Android 4.1/4.3.1(果冻豆) 基于Linux内核3.0.31?更流畅的用户界面,适用于 Android Beam 的蓝牙数据传输
安卓 4.4/4.4.4,4.4W/4.4W.2(奇巧) 与云存储集成、内置传感器、锁屏艺术
安卓 5.0/5.1.1(棒棒糖) 改进了 RAM 和电池管理,修复了应用程序突然关闭、无线连接、通知等问题。

它是开源且商业友好的。用户可以选择用自己选择的应用程序替换内置应用程序。自最初发布以来,Android 已经发布了许多版本。

SL4A - Android 架构

Android 软件堆栈由不同的层组成,每一层都表现出明确定义的Behave,并为其上方的层提供特定的服务。下图展示了 Android 的广泛架构及其主要组件。

安卓架构

Linux内核

Android 是基于 Linux 内核代码构建的,经过修改后可以在嵌入式系统上运行,而不是传统的 Linux 系统。许多常见设备的硬件驱动程序都内置在内核中,从而保证了设备的可移植性。它基于基于安全用户的权限模型,可防止一个应用程序读取另一应用程序的信息或干扰其执行(例如CPU、内存、设备等)。

基于组 ID 的网络和蓝牙功能访问、记录器、警报、电源管理、低内存杀手、Binder IPC 机制是内核的一些值得注意的增强功能。

库和运行时

这形成了架构的第二层。它包括一组硬件优化的 C、C++ 库,也称为本机层。示例包括媒体库、SQLite、SSL、Bionic、WebKit 等。

Android 运行时由两个不同的组件组成:Dalvik VM 和核心库。Dalvik VM为Android平台上的应用程序提供了执行环境。这组核心库提供了 Java API 中可用的大部分功能。

应用框架

该层将库作为服务提供给应用程序。该层中一些最重要的组件包括位置管理器、资源管理器、活动管理器和通知管理器。

应用领域

默认情况下,Android 附带了一组丰富的应用程序,包括浏览器、短信程序、日历、联系人管理器、地图等。如果用户需要,Google Play 可以提供这些应用程序的替代品。

建筑模块

应用程序可以通过四个功能块与系统交互。它们如下 -

  • 活动- 活动代表用户在视觉上看到或与之交互的单个屏幕。例如,电子邮件应用程序可能有一个显示新电子邮件列表的活动,另一个用于撰写电子邮件的活动,以及另一个用于阅读电子邮件的活动。

  • 服务- 大部分处理是由这些服务为您的应用程序完成的。它是用户界面背后的逻辑。例如,服务可能会在用户使用不同的应用程序时在后台播放音乐,或者可能会通过网络获取数据而不阻止用户与活动交互。

  • 广播接收器- 可以注册以侦听系统或应用程序事件并发出有关相同事件的通知的组件。源自系统的广播的一个实例是“低电量通知”,而应用程序级广播可以是“下载成功”通知。

  • 内容提供商- 内容提供商管理并帮助您在多个应用程序之间共享数据。例如,内容提供商可以用于共享联系人数据。

这些组件通过称为Intents 的消息相互交互。

SL4A - Android 脚本层

Android 脚本对于自动化和原型设计等简单任务来说是一个方便的工具,而不是使用 Java 编程语言来完成同样的任务。Android 脚本层 (SL4A) 为 Android 平台上的多种脚本解决方案提供了一个平台。

什么是SL4A?

Android 脚本层 (SL4A) 是一个库,它提供了一个平台来编写简单的脚本,以使用 JAVA 以外的语言在 Android 设备上自动执行任务。

SL4A 最初称为 Android 脚本环境 (ASE),于 2009 年 6 月在 Google 开源博客上首次发布。该项目主要通过 Damon Kohler 的努力才得以问世,并通过其他开发人员的贡献不断发展壮大。

它支持最流行的脚本语言。这些包括 -

  • 豆壳2.0b4
  • JRuby 1.4
  • 路亚5.1.4
  • 珀尔 5.10.1
  • PHP 5.3.3
  • Python
  • 犀牛1.7R2
  • JavaScript
  • TCL

为什么选择 SL4A – 脚本语言与 JAVA

人们可能会问的第一个问题是:“为什么使用 SL4A 而不是 Java?

首先,并不是每个人都是 Java 的粉丝。与 Java 相比,脚本语言提供了简单的编程环境。

其次,该语言需要使用编辑/编译/运行设计循环。这意味着您每次需要进行某些修改时都需要编辑、重新编译然后运行应用程序。相反,脚本是即时解释和执行的。此外,在许多情况下,SL4A 甚至可以重用为桌面环境编写的代码。

下图说明了分别使用针对 SL4A 的 Python 和 Java 编写的脚本。

Python 瞄准 SL4A

SL4A - 架构

SL4A 具有三个主要组件。它们如下 -

  • 脚本解释器
  • Android RPC 客户端
  • 外墙

在本章中,我们将更多地讨论这三个组件。

脚本解释器

SL4A 充当脚本主机。它支持多种脚本语言,例如Python、Ruby、Lua、BeanShell、JavaScript和TCL。可以通过为该脚本语言开发新的 SL4A 解释器来动态合并新的脚本语言来扩展 SL4A。

每个脚本都在其自己的解释器实例中运行。因此,多个脚本可以同时运行而不会互相影响。

Android RPC 客户端

在解释器实例中运行的脚本通过 Android 代理 RPC 客户端与 SL4A 应用程序进行通信。客户端建立与 SL4A 的远程过程调用 (RPC)连接,并允许脚本与 Android 框架交互。SL4A 立面促进了这种沟通。数据作为JSON有效负载发送。

Android RPC 客户端适用于每种受支持的脚本语言。客户端模块可以从 SL4A 网站https://code.google.com获取。

Android 脚本层

外墙

外观简化了脚本对底层 Android API 的访问。SL4A 通过一组广泛的外观(如 AndroidFacade、BluetoothFacade、ActivityManagerFacade、CommonIntentsFacade 等)向脚本公开 Android 框架 API。

SL4A 功能提供了一系列丰富的功能,例如相机、位置、电池管理器、媒体播放器、媒体录音机等等。

使用SL4A

SL4A 系统适用于以下类型的任务 -

  • RAD 编程- 通过 SL4A,可以使用快速应用程序开发 (RAD) 方法快速创建原型应用程序。如果想法的可行性得到确认,您就可以创建一个完整的 Android 应用程序。

  • 测试脚本- 它可用于编写测试脚本。

  • 构建实用程序- 可以使用 SL4A 构建执行小任务或自动执行重复任务的某些方面的实用程序脚本或工具。

SL4A - Python 库

Python 有一个标准库,其中包含各种例程,可帮助您轻松编码和重用这些代码。模块是一个Python 文件,其中包含变量的定义和一组相关的例程或函数。

Python 库提供的一些核心模块如下 -

  • 内置函数和异常- Python 在启动时导入这两个模块,并使它们的内容可用于所有程序。内置模块定义了内置函数,如len、int、range,而异常模块定义了所有内置异常。

  • 操作系统接口模块- 操作系统模块提供了通过脚本执行操作系统级别操作的功能。

  • 类型支持模块- 类型支持模块包括字符串模块,用于实现常用的字符串操作;数学模块提供数学运算等。

  • 正则表达式- 正则表达式是以特定语法编写的字符串模式,可用于匹配或提取字符串或子字符串。re 模块为 Python 提供正则表达式支持。

  • 语言支持模块- sys 模块使您可以访问各种解释器变量,例如模块搜索路径和解释器版本。运算符模块提供与许多内置运算符等效的功能。复制模块允许您复制对象。最后,gc 模块使您可以更好地控制 python 2.0 中的垃圾收集器设施。

关于 JSON

JavaScript 对象表示法 (JSON) 是一种数据交换格式。尽管许多编程语言都支持 JSON,但它对于基于 JavaScript 的应用程序(包括网站和浏览器扩展)特别有用。JSON 可以表示数字、布尔值、字符串、null、数组(值的有序序列)以及由这些值(或其他数组和对象)组成的对象(字符串值映射)。

SL4A - 开发环境

本章详细介绍了设置开发环境的过程。它还讨论了如何配置您的设备以使用 SL4A。

开发环境

您必须先下载并安装几个先决条件,然后才能开始使用 SL4A 进行开发。

Java 开发工具包 (JDK)

首先,您的系统上应该安装最新版本的 JDK(JDK 5 或更高版本)。

要确认安装的 JDK 的兼容版本可用于环境,请在命令行或控制台终端上执行以下命令,如下所示 -

$javac –version 
$java –version

注意- 将 PATH 环境变量设置为 jdk/bin 文件夹

Python

默认情况下,Python 很可能安装在 Mac OS X 和 Linux 上。Windows操作系统默认没有安装Python。Python 可以从http://python.org下载。

安装后,修改 Windows 路径以添加 Python 目录。

要验证您的系统上是否安装了 Python,请打开终端窗口并输入 Python。

管理员命令

Android.py 文件

唯一需要下载的附加文件是android.py文件。在 Python 安装目录的 /Lib/site-packages 下包含此文件的副本。该文件包含用于 Android 开发的 python 模块。

Android.py 文件

安卓软件开发工具包

Android SDK提供了许多工具。第一步是下载适合您的操作系统的安装文件。提供适用于 Mac OS X、Linux 和 Windows 的安装程序。 SDK 安装程序可以在https://developer.android.com/sdk找到。

安卓SDK工具

这里讨论的开发环境是Windows。Google 提供了一个 zip 文件和一个可执行文件,用于在 Windows 上安装 SDK。

在开发机器上安装 Eclipse

Eclipse 是作为一个用 Java 语言编写的可扩展的集成开发环境 (IDE) 开发的。它需要安装 Java 才能工作。Eclipse 有多种风格 - Classic、Galelio、Luno、Mars、Neon 等。

它以单个 .zip 文件形式分发。您所要做的就是解压程序内容。解压后的文件夹中有一个 Eclipse.exe 文件。双击该文件启动程序。

Eclipse.exe 文件

SL4A - 配置您的设备

安装 SL4A

有时,您可能想在设备上编写脚本并执行它们。Android 脚本层有助于实现同样的目标。要在您的设备上安装 SL4A,请按照以下步骤操作 -

  • 将SL4A.apk文件下载到您的设备上。

  • 从通知屏幕启动.apk文件。

  • 在下一个屏幕上选择安装以实际安装 SL4A。

或者,如果您选择使用模拟器而不是 Android 设备,请使用模拟器内的浏览器安装 SL4A。设备上的 SL4A 安装初始屏幕如下所示。

SL4A 安装初始屏幕

添加Python解释器

要在设备上安装 python 解释器,请按照以下步骤操作 -

  • 步骤 1 - 启动 SL4A 应用程序。

  • 步骤 2 - 单击菜单按钮。

  • 步骤 3 - 将显示选项列表。选择查看

  • 步骤 4 -从对话框中选择解释器选项。单击“添加”

  • 步骤 5 - 显示可供下载的解释器列表。选择Python 2.62(或更高版本)。

要在模拟器上安装 python 解释器,请按照以下步骤操作 -

  • 步骤 1 - 确保模拟器在后台运行。

  • 步骤 2 - 下载 python_for_android_rx.apk。

  • 步骤 3 - 在终端命令行 shell 中,导航到存储 apk 文件的位置并在命令行上键入以下内容 -

adb  install  python_for_android_rx.apk

SL4A 支持多种语言的脚本引擎。下面提到了一些特定于语言的 apk 文件的列表 -

  • beanshell_for_android_rx.apk
  • jruby_for_android_rx.apk
  • lua_for_android_rx.apk
  • perl_for_android_rx.apk
  • python_for_android_rx.apk
  • rhino_for_android_rx.apk

连接到Windows操作系统

步骤 1 - 下载并安装适用于 Windows 的 USB 驱动程序。

步骤 2 − 设置您的设备 −

  • 从设备上的所有应用程序屏幕启动 SL4A。

  • 点击菜单按钮 →查看

  • 从列表中选择口译员。

  • 点击菜单按钮 →启动服务器

  • 选择公共(通过 Wi-Fi 连接)或私人(通过 USB 连接)。

步骤 3 - 添加环境变量(用户变量)AP_PORT和值9999

Android SDK 和 Eclipse 已在后续章节中讨论。

SL4A - Android SDK 导航

一款软件开发工具包,使开发人员能够为 Android 平台创建应用程序。Android SDK 包括带有源代码的示例项目、开发工具、模拟器以及构建 Android 应用程序所需的库。本章讨论 Android SDK 以及使用它来开发针对 SL4A 的代码的方法。

SDK组件

安装 Android SDK 的目录树包含一系列文件夹,其中包含文档、示例代码和许多工具。导航到工具子目录会显示许多可执行文件。

下面讨论的是 Android SDK 中的一些重要组件。

SDK管理器

Android SDK 管理器将 SDK 工具、平台和其他组件分成包,以便于访问和管理。SDK 可以配置为检查新的或更新的 SDK 包和附加工具。

安卓SDK管理器

默认情况下,Android Studio 不会检查 Android SDK 更新。启用自动 Android SDK 检查 -

  • 步骤 1 - 选择文件设置外观和Behave系统设置更新

  • 步骤 2 - 选中自动检查 Android SDK 更新复选框并选择更新通道。

  • 步骤 3 - 单击“确定”“应用”以启用更新检查。

SDK 更新站点选项卡显示 Android Studio 检查 Android SDK 和第三方更新的站点。您可以添加托管自己的 Android SDK 插件的其他网站,然后从这些网站下载 SDK 插件。

安卓模拟器

AVD管理器提供了一个图形用户界面,您可以在其中创建和管理 Android 模拟器所需的 Android 虚拟设备 (AVD)。Android 虚拟设备 (AVD) 由许多文件组成,其中包括模拟器所需的配置和虚拟存储。您可以根据需要创建任意数量的 AVD 来模拟不同的设备。

以下步骤可用于在 Eclipse 中创建 AVD -

  • 步骤 1 - 选择窗口AVD 管理器

  • 步骤 2 - 单击新建

  • 步骤 3 - 输入 AVD 的名称,选择目标并指定其他功能的值。

  • 步骤 4 - 单击创建 AVD

对于带有键盘的设备,有一组从主机键盘到设备上的操作的标准映射。默认模拟器键映射是 -

模拟器密钥 主机设备上的映射
BUTTON_CALL F3
BUTTON_挂断 F4
BUTTON_HOME
BUTTON_BACK 逃脱
BUTTON_MENU F2、向上翻页
BUTTON_STAR Shift+F2、向下翻页
按钮电源 F7
BUTTON_搜索 F5
BUTTON_CAMERA Ctrl+Keypad_5、Ctrl+F3
BUTTON_VOLUME_UP 小键盘_Plus、Ctrl+F5
BUTTON_VOLUME_DOWN 小键盘_减号、Ctrl+F6
切换_网络 F8
切换跟踪 F9
切换全屏 Alt-Enter
BUTTON_DPAD_CENTER 键盘_5
BUTTON_DPAD_UP 键盘_8
BUTTON_DPAD_LEFT 键盘_4
BUTTON_DPAD_RIGHT 键盘_6
BUTTON_DPAD_DOWN 键盘_2
TOGGLE_轨迹球 F6
显示轨迹球 删除
CHANGE_LAYOUT_PREV 小键盘_7,Ctrl+F11
CHANGE_LAYOUT_NEXT 小键盘_9、Ctrl+F12
ONION_ALPHA_UP 小键盘_乘法
ONION_ALPHA_DOWN 小键盘_除法

您可以通过编辑.keyset 文件中的default.keyset文件来更改这些设置。安卓子目录。

Android 调试桥

ADB(Android 调试桥)是 Google Android SDK 中包含的一个命令行实用程序。ADB 可以通过 USB 从计算机控制您的设备、来回复制文件、安装和卸载应用程序、运行 shell 命令等等。

如果您有一个正在运行的模拟器并连接了一个真实设备,则必须指定要将 ADB 命令发送到真实设备的位置,请使用选项 - d,对于模拟器,请使用 -e。以下是 ADB 的标志和命令列表。

编号 ADB 标志和说明
1

-d

将设备定向到唯一连接的 USB 设备;如果连接了多个 USB 设备,则会返回错误。

2

-e

将命令定向到唯一正在运行的模拟器;如果多个模拟器正在运行,则会返回错误。

3

-s <序列号>

使用给定的序列号直接命令 USB 设备或模拟器。

4

设备

列出所有连接的设备

5

连接<主机>:<端口>

通过 TCP/IP 连接到设备

6

断开<主机>:<端口>

与 TCP/IP 设备断开连接

编号 ADB命令及说明
1

adb Push <本地> <远程>

将文件/目录复制到设备

2

adb pull <远程> [<本地>]

从设备复制文件/目录

3

adb 同步 [<目录>]

如果未指定 <directory>,则 /system 和 /data 分区都将被更新。如果是“系统”或“数据”,则只更新对应的分区。

4

亚行外壳

以交互方式运行远程 shell

5

adb emu <命令>

运行模拟器控制台命令

6

亚行日志猫

查看设备日志

7

adbforward <本地> <远程>

转发套接字连接

8

adb install [-l] [-r] [-s] <文件>

将此包文件推送到设备并安装。(-l 向前锁定应用程序)

(-r 重新安装应用程序,保留其数据)

(-s 安装在 SD 卡上而不是内部存储上)

9

adb uninstall [-k] <软件包>

从设备中删除此应用程序包。-k 表示保留数据和缓存目录

10

亚行错误报告

返回设备中应包含在错误报告中的所有信息。

11

亚行帮助

显示此帮助消息

12

亚行版本

显示版本号

贝壳

shell 是一个程序,它监听用户的键盘输入并按照用户的指示执行操作。adb shell命令使 Unix 能够将 shell 命令发送到模拟器或连接的设备并显示结果。它还可用于在本地启动交互式 shell。

要在不进入远程 shell 的情况下发出单个命令,请使用如下 shell 命令 -

adb [-d|-e|-s <serialNumber>] shell <shell_command>

或者在模拟器/设备上输入远程 shell -

adb [-d|-e|-s <serialNumber>] shell

当您准备退出远程 shell 时,请按CTRL+D或键入EXIT

Dalvik 调试监控服务

Android 附带了一个调试工具,Dalvik 调试监控服务 (DDMS)。该工具提供附加服务,例如端口转发服务、设备屏幕截图、来电和短信欺骗等。

Dalvik 调试监控服务

当 DDMS 启动时,它会连接到adb。当设备连接时,在 adb 和 DDMS 之间创建 VM 监控服务。当设备上的 VM 启动或终止时,此服务会通知 DDMS。

一旦 VM 开始运行,其进程 ID 就会通过adb发送到 DDMS ,并且adb守护进程会打开与 VM 调试器的连接。DDMS 现在可以使用自定义有线协议与虚拟机通信。

SL4A - 使用 Eclipse

本章将引导您了解 Eclipse IDE 的基础知识并配置它以开发适用于 Android 的 Python 脚本。

Eclipse 基础知识

Eclipse 是一个具有许多功能和选项的应用程序。第一次启动该程序时,欢迎屏幕将迎接您。Eclipse 使用许多基本概念和术语来解决程序的不同功能和操作。

其中一些术语解释如下 -

Workbench - 它标识 Eclipse 应用程序的整体窗口。它包含多个子窗口,每个窗口包含多个选项卡。

工作区- 它是指系统文件系统上保存使用 Eclipse 创建的项目的位置。

工作区启动器

视角- 菜单和窗口在任何时间打开是一种个人偏好。Eclipse 有许多针对典型用途配置的透视图,例如编写代码、调试等。当您的活动发生变化时,您还可以切换到不同的透视图。视角也是可定制的。

安装 Eclipse 插件

需要配置 Eclipse 才能开发 SL4A 应用程序。在主机上成功安装先决条件后,必须添加以下 Eclipse 插件 -

以下步骤可用于在 Eclipse 上安装插件 -

  • 步骤 1 - 单击“帮助”

  • 步骤 2 - 选择安装新软件

  • 步骤 3 - 单击添加

  • 步骤 4 - 指定访问插件的名称和 URL。单击“确定”

  • 步骤 5 - 选择所有工具并单击Next。插件安装开始

添加存储库

Eclipse 中的 Python 解释器

按照给定的步骤在 Eclipse 中配置 Python 解释器。

  • 步骤 1 - 选择Windows首选项

  • 步骤 2 - 转到PyDev解释器Python

  • 步骤 3 - 单击新建按钮。

  • 步骤 4 - 指定解释器的名称。在位置字段中,输入 python.exe 的路径。例如,C:\Python26\python.exe

  • 步骤 5 - 单击“确定”

Python 解释器 Eclipse

SL4A - 探索 Android API

SL4A基于Facade Design Pattern与底层Android API进行通信。本章解释了外观设计模式的工作原理和不同的 SL4A API 外观。

什么是外观设计模式?

外观是一个提供接口的对象,可简化对应用程序中相关接口的访问。换句话说,外观将库的工作与客户端隔离,并充当每个子系统级别的入口点。因此,客户只能通过他们的外观进行交流。下图解释了同样的情况。

立面设计模式

SL4A 和 Android API 外观

SL4A 为其支持的每种语言托管解释器。解释器通过称为外观的接口访问底层 Android API。

下表列出了顶层外观及其提供的功能 -

编号 Android API 外观和描述
1

活动结果外观

它设置脚本如何将信息作为活动返回。此方法意味着您的脚本将返回某种结果。结果类型可以设置为 RESULT_CANCELED(0) 或 RESULT_OK(-1)

2

Android外观

它提供对常见 Android 功能的访问,例如读取输入、通知、启动应用程序组件等。

3

应用程序管理器门面

列出所有可用和正在运行的包、启动活动、创建任务管理器或终止一组特定的包。

4

BatteryManager外观

公开电池管理器并允许跟踪电池状态、健康状况、类型级别、电压等。

5

蓝牙门面

提供对蓝牙功能的访问,从基本连接功能到发送和接收 ASCII 和二进制数据。此外观至少需要 API 级别 5。

6

相机立面

此方法提供对所有相机相关功能的访问。允许使用设备的相机拍照并将其保存到指定路径。它提供了两个函数,即cameraCapturePicture和cameraInteractiveCapturePicture。这些功能仅限于使用设备后部的镜头。

7

共同意图外观

提供对常见 Android Intents 的访问,例如打开联系人列表、进行地图搜索、通过操作启动活动等。

8

联系方式门面

允许访问联系人,例如提供联系人列表以选择联系人、按属性查询联系人列表以及获取所有联系人及其 ID 和属性的列表。外观提供的一些方法包括contactsGet、pickContact、contactsGetById等。

9

事件门面

Android 操作系统维护一个事件队列,用于在应用程序之间异步传递信息。该外观提供了管理事件队列的功能,例如清除现有事件、发布新事件、列出、注册和取消注册广播信号等。方法示例包括 eventPost、eventClearBuffer 等。

10

无眼门面

可在 API 级别 4 以下的设备上使用。它允许脚本使用文本转语音技术进行对话。此外观现在已被 TextToSpeechFacade 取代。唯一可用的功能是 ttsSpeak。

11

位置外观

提供通过 GPS 或使用有关您当前使用的手机信号塔的信息来跟踪当前位置的功能。此功能需要有效的互联网连接才能进行实际查找。façade 提供了 getLastKnownLocation、startLocating、stopLocating、readLocation 等方法。

12

媒体播放器门面

允许播放媒体文件、控制媒体播放器、查询媒体播放器的当前状态以及获取有关媒体文件的信息。mediaIsPlaying、mediaPlayInfo 和 mediaPlayList 返回媒体播放器的当前状态。对 startActivity 函数的调用将启动媒体播放器。mediaPlay、mediaPlayPause、mediaPlayClose、mediaPlaySeek、mediaPlayStart 和 mediaPlaySetLooping 等函数用于控制媒体播放器。

13

媒体记录器门面

该外观提供音频和视频录制功能。startInteractiveVideoRecording、recorderStartMicrophone、recorderCaptureVideo 函数分别用于启动和开始音频/视频录制。要结束先前开始的录音,请调用 recorderStop 函数。

14

电话门面

以编程方式提供基本的电话操作,例如跟踪电话状态、漫游状态、发起呼叫、SIM 信息等。方法的示例包括phoneCallNumber、phoneDialNumber、getCellLocation 等。

15

首选项外观

允许访问共享首选项,例如获取现有首选项列表以及阅读、修改和添加新首选项。SL4A r4 版本支持三个函数:prefGetAll、prefGetValue 和 prefPutValue。

16

传感器管理器外观

允许跟踪传感器数据,例如光、加速度、磁场和方向。要启动/停止感测,请使用 startSensing(已弃用,并由 SL4r4 替换为 startSensingThreshold 和 startSensingTimed)和 stopSensing 函数调用。readSensors、sensorsGetLight、sensorsReadAccelerometer、sensorsReadMagnetometer 和sensorsReadOrientation 是该外观提供的函数。

17 号

设置外观

提供对不同手机设置的访问,如铃声音量、屏幕亮度、飞行模式、振动、媒体音量等。此外观提供的功能包括 checkAirplaneMode、checkRingersilentMode 和 checkScreenOn(至少 API 级别 7)、getVibrateMode、setScreenTimeout、toggleVibrateMode setRingerVolume 等。

18

信号强度门面

允许监控电话信号强度。调用startTrackingSignalStrengths函数开始收集数据。调用 readSignalStrengths 函数开始收集数据。要关闭进程,请调用 stoptrackingSignalStrengths 函数。它至少需要 API 级别 7。

19

短信门面

具有删除、读取、标记、发送短信等功能。该外观提供的功能示例包括 smsMarkMessageRead、smsDeleteMessage、smsSend 等。

20

语音识别门面

允许向脚本添加语音识别功能。它只有一个名为 recognizeSpeech 的函数。

21

文字转语音外观

为API4及更高版本提供TTS服务。要让设备说话,请使用 ttsSpeak 函数。要确定发言功能是否已完成,请使用 ttsIsSpeaking 函数。

22

音调发生器外观

为给定的数字生成 DTMF 音。要使用它,您必须调用generateDtmfTones函数。

23

用户界面外观

提供创建用户界面元素(如文本框、复选框、日期选择器等)的功能。它还允许交互式使用 HTML 页面。

24

唤醒锁门面

提供创建唤醒锁的函数包括wakeLockAcquireBright、wakeLockAcquireDim、wakeLockAcquireFull和wakelockAcquirePartial。

25

网络摄像头外观

该外观至少需要 API 级别 8。它允许将 MJPEG 流从前置设备摄像头传输到网络。要启动/停止网络摄像头,请分别使用 webcamStart 和 webcamStop 函数。要在流式传输时调整视频质量,请使用 webcamAdjustQuality 函数。

26

Wifi门面

帮助您控制设备上的 Wi-Fi 无线电。它允许脚本查询 Wi-Fi 连接状态、搜索接入点、连接和断开 WiFi 网络以及在脚本执行期间保持 Wi-Fi 锁定。

有关这些外观提供的方法的完整列表,请参阅https://code.google.com 。后续章节说明如何使用 Android Façade API 函数创建实用程序。

SL4A - 构建 GUI

图形用户界面 (GUI) 表示一组图形组件,使用户能够浏览、访问应用程序功能并与之交互。

用户与 SL4A 交互有两种基本方法,即 -

  • 对话框,如警报

  • 使用 HTML 和 JavaScript 构建 UI,然后使用 Python 在幕后处理任何其他处理。

本章解释了这两种方法。

基于 Python 的 GUI 对话框

SL4A 包含一个 UI 外观,用于访问 android API 提供的基本 UI 元素。这些函数在调用时返回结果对象作为命名元组。每个结果都被分配一个唯一的 ID 以用于跟踪目的。第二个元素是结果。它代表用户的输入。该元组还包括第三个元素错误,以向调用者提供有关可能遇到的任何错误情况的反馈。如果没有遇到错误,则该元素设置为 None。

编号 UiFacade功能及说明
1

对话框获取输入

向用户询问文本输入。

title (String)输入框的标题(默认 = Value)

message (字符串)显示在输入框上方的消息(默认=请输入值:)

defaultText (String)要插入到输入框中的文本(可选)

结果是用户的输入,如果点击取消,则结果为 None (null)。

2

对话框显示

显示对话框

3

对话框创建警报

创建警报对话框。

标题(字符串)(可选)

消息(字符串)(可选)

4

对话框关闭

关闭对话框。

5

对话框创建日期选择器

创建日期选择器对话框。

年份(整数)(默认 = 1970)

月份(整数)(默认 = 1)

天(整数)(默认 = 1)

6

对话框创建时间选择器

创建时间选择器对话框。

小时(整数)(默认 = 0)

分钟(整数)(默认 = 0)

is24hour (布尔值)使用 24 小时制 (默认 = false)

7

对话框获取密码

向用户询问密码。

title (字符串)密码框的标题(默认 = 密码)

message (字符串)显示在输入框上方的消息(默认=请输入密码:)

8

对话框获取响应

返回对话响应。

9

对话框设置正按钮文本

设置警报对话框正按钮文本。文本(字符串)

10

对话框设置负按钮文本

设置警报对话框按钮文本。文本(字符串)

11

对话框设置中性按钮文本

设置警报对话框按钮文本。文本(字符串)

12

对话框设置单选项

这将创建一个单选按钮列表。

13

对话框设置多选项

这将创建一个复选框

14

对话框创建水平进度

创建水平进度对话框。

标题(字符串)(可选)

消息(字符串)(可选)

最大进度(整数)(默认 = 100)

15

对话框创建旋转进度条

创建一个微调进度对话框。

标题(字符串)(可选)

消息(字符串)(可选)

最大进度(整数)(默认 = 100)

16

添加上下文菜单项

将新项目添加到上下文菜单。

label (字符串)此菜单项的标签

event (字符串)将在菜单项单击时生成的事件

eventData(对象)(可选)

17 号

添加选项菜单项

将新项目添加到选项菜单。

label (字符串)此菜单项的标签

event (字符串)将在菜单项单击时生成的事件

eventData(对象)(可选)

图标名称(字符串)

18

网页显示

显示具有给定 URL 的 WebView。

网址(字符串)

wait(布尔)块,直到用户退出 WebView(可选)

19

清除上下文菜单

删除先前添加到上下文菜单中的所有项目。

20

清除选项菜单

删除之前添加到选项菜单中的所有项目

21

制作吐司

创建通知

例子

一个简单的 Toast 示例

import android 
droid = android.Android() 
uname = droid.getInput("Enter your name") 
print uname  
droid.makeToast("Hello %s" %uname.result)

水平进度条

import android 
   droid = android.Android() 
   title = "Progress" 
   str = "Loading..." 
   droid.dialogCreateHorizontalProgress(title,str,100) 
   droid.showDialog() 
	
   for x in range(0,99) 
      time.sleep(0.1) 
      droid.dialogSetCurrentProgress(x) 
		
   droid.dialogDismiss()

模态对话框与非模态对话框

模式对话框或窗口是另一个进程或窗口的子级。对于模式对话框,处理将等待或阻塞,直到用户与新对话框交互。

这种情况的典型示例是警报对话框。在用户执行操作之前,警报不会关闭。

下图是模式对话框的示例。

模态对话框

总而言之,当您在继续执行之前需要用户输入时,请使用模式对话框。

带有 HTML 的 Python GUI

SL4A 支持构建基于 CSS、HTML、JavaScript 和 Python 的图形用户界面 (GUI)。该方法使用 HTML 和 JavaScript 来构建 UI,使用 CSS 来增强 HTML 元素和字体的外观和一致性,并使用 Python 来处理任何其他处理。

以下示例说明了一个基本的 HTML GUI 示例 -

1.语音.html

<html> 
   <head> 
      <title>Text To Speech</title> 
		
      <script> 
         var droid = new Android(); 
         var speak = function(){ 
            droid.postEvent("say",document.getElementById("say").value); 
         } 
      </script> 
		
   </head>
	
   <body> 
      <form onsubmit = "speak()";return false;”> 
         <label for = "say">What is your message?</label> 
         <input type = "text" id = "say"/> 
         <input type = "submit" value = "Speak"/> 
      </form> 
   </body> 
	
</html>

2.txtToSpeech.py

import android 
droid = android.Android() 
droid.webViewShow(‘file:///sdcard/sl4a/scripts/Speech.html’) 

while True: 
   result = droid.waitForEvent(‘say’).result 
   droid.ttsSpeak(result[‘data’])

这两个文件 - Speech.html 和 txtToSpeech.py​​ 都必须位于设备上的/sdcard/sl4a/scripts目录中。运行 python 脚本来启动 HTML 文件。

该文件由webViewShow API 调用启动。单击“发言”按钮时会生成该事件。

SL4A - 使用 Python Facades 的实用程序

基于电子邮件的应用程序

基于电子邮件的应用程序是移动设备中最常见的实用程序之一。可以通过 SL4A Android 门面使用sendEmail API 调用。

该函数采用三个参数 -

  • to_address - 以逗号分隔的收件人列表。

  • title - 表示电子邮件的标题。

  • message - 表示要发送的消息。

import android,datetime,smtplib 
from email.mime.multipart import MIMEMultipart 
from email.mime.text import MIMEText 

droid = android.Android() 
serv = ’smtp.gmail.com’ 
port = 587 
mailto = ’chris’ 
mailfrom = ’charley’ 
pass = ’pass@123’ 

msg = MIMEMultipart() 
msg[‘Subject’] = ’Tes Mail’ 
msg[‘To’] = mailto 
msg[‘From’] = mailfrom 

body = ’This is a test mail!!’ 
msg.attach(MIMEText(body,’plain’)) 

smtpCon = smtplib.SMTP(serv,port) 
smtpCon.starttls() 
smtpCon.login(mailfrom,pass) 
smtpSendmail(mailfrom,mailto,msg.as_string()) 
smtpCon.close()

用于构建电子邮件程序的 python 库是smtplib。此外,我们还使用了电子邮件库。该库包含许多辅助函数,使我们能够以正确的形式构建消息。mimetypes库帮助我们对消息进行编码。

无线网络扫描仪

以下代码列出了所有可用的 Wi-Fi 接入点 -

import android, time 

def main(): 
   global droid 
   droid = android.Android() 
	
while not droid.wifiStartScan().result: 
   time.sleep(0.25) 
	
networks = {} 

while not networks: 
   for ap in in droid.wifiGetScanResults().result: 
      networks[ap[‘bssid’]] = ap.copy() 
		
   droid.dialogCreateAlert(‘Access Points’) 
   droid.dialogSetItems([‘%(ssid)s,%(level)s,%(capabilities)s’ % 
      ap for ap in networks.values() ]) 
		
droid.dialogSetPositiveButtonText(‘OK’) 
dorid.dialogShow() 

if __name__=’__main__’: 
   main()

通话记录

通话记录的代码如下。

import android 
droid = android.Android() 
mylog = droid.getConstants("android.provider.Calllog$Calls").result 
calls = droid.queryContent(mylog["CONTENT_URI"],["name","number","duration"]).result 

for c in calls: 
   print c

SL4A - 使用 Python 进行后台脚本编写

服务是一个组件,在后台运行,不与用户直接交互。它没有任何 UI(用户界面)。即使应用程序被破坏,该服务也会无限期地在后台运行。

本章介绍编写在后台执行特定任务的脚本。

后台任务

SL4A 允许脚本在终端或后台运行。要在后台启动脚本,请选择看起来像齿轮的图标。该脚本在后台无限运行。然而,人们可以选择明确关闭此类服务。

在启动脚本上启动

这些脚本会在设备启动时启动。“启动时启动”首选项屏幕是一个应用程序,可让您指定设备的启动首选项。该实用程序支持通过主脚本执行多个脚本。主脚本启动其他脚本。

触发器

触发器定义了一组必须执行以响应操作/事件的操作。可以添加和删除触发器。/sdcard/sl4a/scripts 目录允许您选择在事件触发时运行的脚本。可能触发脚本的选项列表包括电池、位置、电话、传感器和信号强度。

基于方向的行动

SL4A 允许我们根据设备的方向和移动来运行脚本。startSensingTimedAPI 用于确定设备的方向和移动。

以下代码片段使用 TTS 功能在手机正面朝下放置时通知用户 -

import android,time 
droid = android.Android() 
droid.startSensing() 

while True: 
   res = droid.sensorsGetLight().result 
	
   if res is not None and res <=10: 
      droid.ttsSpeak("Device faced down!!") 
   time.sleep(5)

基于位置的行动

图书馆、教堂是您可能经常去的地方,当您在那里时,您肯定希望将手机静音。SL4A 允许您构建脚本来跟踪您的位置并采取特定操作。

基于时间/基于经过时间的触发器

这些触发器用于在一天中的特定时间执行操作。应使用 24 小时时间格式来指定时间。示例包括设置警报、提醒等的脚本。与基于时间的触发器不同,基于经过时间的触发器在经过一段时间后执行脚本。闹钟应用程序上的贪睡选项就是基于这个概念。

基于经过时间的触发器

SL4A - 包装和分销

本章介绍使用Eclipse和二维码打包和分发脚本的方法。

快速响应 (QR) 码

大多数 Android 设备都包含本机条形码扫描仪。SL4A支持将二维码直接导入编辑器。一个QR码只能编码4,296个字符的内容。因此,这种分发方法适合短脚本。

您可以在多个网站上粘贴文本并创建二维码。但是,我们将参考http://zxing.appspot.com/generator来生成插图中的二维码。

步骤解释如下 -

步骤 1 - 打开“内容”下拉列表并选择“文本”

步骤 2 - 在文本内容的第一行,输入脚本的名称(例如,greet.py)。

二维码生成器

步骤 3 - 将脚本内容粘贴到其下方。

步骤 4 - 从尺寸下拉列表中选择条形码尺寸。

步骤 5 - 单击生成。

步骤 6 - 嵌入生成的条形码图像或共享它。

因此,二维码是通过博客或网站分享短脚本的有效方式。

构建应用程序包 – Eclipse

Android 应用程序分布在单个文件/包中,扩展名为 . apk扩展名。Android 包(.apk)类似于 .jar 或 .zip 文件。每个 。apk包含许多必须存在的强制文件。最重要的文件是AndroidManifest.xml

清单文件做了很多事情 -

  • 声明应用程序组件。

  • 确定应用程序所需的用户权限。

  • 声明应用程序使用或需要的硬件和软件功能,例如相机、蓝牙服务等。

  • 指定应用程序需要链接的 API 库,例如 Google 地图库。

在 Eclipse 中构建可分发项目(即.apk)的步骤如下所示 -

  • 从 Mercurial 下载并安装 Hg - http://mercurial.selenic.com/wiki/Download。将 PATH 变量设置为安装文件夹。

  • 创建最新 SL4A 存储库的克隆:打开终端并导航到必须创建克隆的目录。输入以下 Hg 克隆:https://android-scripting.googlecode.com/hg/android-scripting。

  • 打开 Eclipse 并单击File/Import/General/Existing Projects into Workspace/Next 并浏览到克隆的目录。单击“Android/确定”,然后选择全部并单击“完成”。

  • 单击 Windows/Preferences/Java/BuildPathVariables/New将ANDROID_SDK包含在类路径变量列表中。将 ANDROID_SDK 作为名称,将 SDK 目录作为文件夹(可能是 c:\ProgramFiles\Android\android-sdk-windows)。

  • 单击项目/自动构建,然后单击项目/清理/清理所有项目/确定。

  • 要将脚本转换为APK,请复制ScriptForAndroidTemplate(右键单击/复制,然后右键单击/粘贴到同一区域)。将出现一个名为 Copy of ScriptForAndroidTemplate的新项目。

  • 要将此项目连接到您的 SL4A 克隆,请双击它,右键单击 build.xml /Run As /Ant Build。使用重构/重命名将项目重命名为您为项目选择的任何名称,然后刷新/清理/构建项目。

  • 接下来,双击 raw 并 Refactor/Rename 将名称 script.py 更改为your_script_name.py,然后双击 src/com.dummy.fooforandroid/Script.java 并将 R.raw.script 更改为 R.raw。 your_script_name 并保存。

  • 双击src并 Refactor/Rename 将包名称 com.dummy.fooforandroid 更改为 your.package.name。对 gen 做同样的事情。

  • 现在突出显示您的项目,然后单击项目/属性/Android。选择您的 Android 目标并单击“确定”

  • 在项目列表的底部,双击 AndroidManifest.xml。将清单中的包名称从 com.dummy.fooforandroid 更改为 your.package.name。将 minSdkVersion 从“4”更改为适合您的 Android 目标(这是 Project/Preferences/Android 中显示的 Android 目标的 API 级别)。取消注释您需要应用程序拥有的权限(去掉开头的 <!-- 和结尾的 -->)。将调试设置为False

  • 右键单击your_script_name并使用文本编辑器打开。删除默认脚本,将其替换为您自己的脚本并保存。然后清理/构建/刷新您的项目并运行它。如果一切顺利,请单击“文件/导出”将应用程序导出为 apk。

  • 单击“下一步”

  • 每个 Android 应用程序在安装之前都必须经过数字签名。如果这是您第一次执行此过程,请选择创建新密钥库。

  • 选择一个文件来保存您的密钥库,并且它必须受密码保护。

  • 单击“下一步”。注意有效性字段。您可以创建一个有效期为任意年数(从 1 到 99)的密钥。

  • 最后一个对话框允许您指定 .apk 文件所在的位置。单击“完成”。

  • 可以使用 Eclipse 或 ADB 工具来测试/安装 .apk 文件。要使用ADB安装,请打开终端窗口,导航到 .apk 目标目录并输入以下内容 -

adb install distributable_file.apk