热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

TitaniumModule模块开发(二)蓝牙控制Module

TitaniumModule模块开发(二)蓝牙控

今天 ,正好项目需要添加蓝牙的控制功能,我去Titianium 文档搜了一下,发现 只有Tizen 系统有,其他的都没有,只能自己做Module。

借这个机会,记录一下蓝牙控制Module 的开发过程中遇到的问题和一些知识点。

编写Module

建立项目

首先 ,建立一个Module 项目,不会的话参考:Titanium-Modules 模块开发 (一) :模块开发基础

创建完成后会是这样:

,

添加蓝牙相关方法

打开BluetoothadapterModule.java 文件

可看到如下代码:

23-34行  是我新添加的 蓝牙控制 的方法。

@Kroll.module(name="Bluetoothadapter", id="com.xkj.bluetooth")
public class BluetoothadapterModule extends KrollModule
{

	// Standard Debugging variables
	private static final String TAG = "BluetoothadapterModule";

	// You can define constants with @Kroll.constant, for example:
	// @Kroll.constant public static final String EXTERNAL_NAME = value;
	
	public BluetoothadapterModule()
	{
		super();
	}

	@Kroll.onAppCreate
	public static void onAppCreate(TiApplication app)
	{
		Log.d(TAG, "inside onAppCreate");
		// put module init code that needs to run when the application is created
	}
	@Kroll.method
	public void toggle() {
            Log.i(TAG, "toggle Bluetooth");

            // Just toggle Bluetooth power, as long as we‘re not already in
            // an intermediate state.
            BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter();
            int state = adapter.getState();
            if (state == BluetoothAdapter.STATE_OFF)
                adapter.enable();
            else if (state == BluetoothAdapter.STATE_ON)
               adapter.disable();
        }
	// Methods
	@Kroll.method
	public String example()
	{
		Log.d(TAG, "example called");
		return "hello world";
	}
	
	// Properties
	@Kroll.getProperty
	public String getExampleProp()
	{
		Log.d(TAG, "get example property");
		return "hello world";
	}
	
	
	@Kroll.setProperty
	public void setExampleProp(String value) {
		Log.d(TAG, "set example property: " + value);
	}

}

当然 还需要添加权限:

打开 项目根目录下的  timodule.xml 文件

10-13行  添加蓝牙权限,



	
	
	
			  
		
				
				
		
	
	
	



蓝牙方法调用

接下来, 打开 example/app.js  ,添加41行 调用刚刚新添加的方法。

剩下的都是 自动生成的一些官方给的示例代码,其中包括了 属性,方法的调用方式,初期 可以参考一下。


// This is a test harness for your module
// You should do something interesting in this harness 
// to test out the module and to provide instructions 
// to users on how to use it by example.


// open a single window
var win = Ti.UI.createWindow({
	backgroundColor:‘white‘
});
var label = Ti.UI.createLabel();
win.add(label);
win.open();

// TODO: write your module tests here
var bluetoothadapter = require(‘com.xkj.bluetooth‘);
Ti.API.info("module is => " + bluetoothadapter);

label.text = bluetoothadapter.example();

Ti.API.info("module exampleProp is => " + bluetoothadapter.exampleProp);
bluetoothadapter.exampleProp = "This is a test value";

if (Ti.Platform.name == "android") {
	var proxy = bluetoothadapter.createExample({
		message: "Creating an example Proxy",
		backgroundColor: "red",
		width: 100,
		height: 100,
		top: 100,
		left: 150
	});

	proxy.printMessage("Hello world!");
	proxy.message = "Hi world!.  It‘s me again.";
	proxy.printMessage("Hello world!");
	win.add(proxy);
}

// 调用 添加的方法 打开蓝牙
bluetoothadapter.toggle();


运行项目

然后 就可以运行一下 试试啦。

话说 怎么运行呢,看图!

  首先右键 build.xml 文件,按下图选择 AntBuild ...  ,打开配置窗口

,

配置窗口:

注意图中 红色矩形标明的地方(看不到的话,拖出去斩了~)

默认情况下 只会选中 dist 项,也就是 项目编译,

而下面的 install 会将测试项目安装到 手机上,所谓测试项目 也就是 example 中的代码部分。

注意这里的顺序, 就是第三个 红色矩形 ,  需要 先编译项目,然后再安装到 手机上。

然后点击run 就可以啦,安装之后的App名称就是你Module的项目名称 ,在这里是 bluetoothadapter 

,

安装成功的样子:

,

OK, 这样 打开手机之后 就可以看到啦。

如果我想知道生成的这个测试项目在哪怎么办,  来看上图中日志的倒数第二行 : 

 [exec] [DEBUG] /Users/ihaveu/Documents/androidsdk_/platform-tools/adb -d install -r /var/folders/50/ltj4zq6j4v94s0svnzb83mcm0000gq/T/mEUPR4uti/bluetoothadapter/build/android/bin/app.apk

明白了么? 就是这个目录:

/var/folders/50/ltj4zq6j4v94s0svnzb83mcm0000gq/T/mEUPR4uti/bluetoothadapter/

到此,打开app 之后 就可以切换蓝牙的打开状态啦。

怎么样,挺简单吧~


应用到其他项目

做好的module 就是要用的, 那么怎么在其他项目中调用自己写的module 呢?往下看。
打开自己的项目,找到module文件夹,如果没有的话创建一个就好了。
,

这时候,返回到 module 的项目中 dist 文件夹。图中标注的就是我们要的module,解压之~

,

将解压后的文件夹中的 android 文件夹 ,拷贝到项目中的modules 文件夹中,如下图:

,

接下来,打开 项目的tiapp.xml 配置文件,如下图,点击“加号” ,从弹出的窗口中选中 刚刚添加的module ,确定

,

再然后, 打开代码,咱的module 可以 调用啦,来看代码:
我这里是 Alloy的项目

controller/index.js 
var bluetoothAdapter = require("com.xkj.bluetooth");
function doClick(e) {  
    alert($.label.text);
    bluetoothAdapter.toggle();
}

$.index.open();

就此,还不能运行,别忘了加权限,打开项目下 tiapp.xml ,在android 的配置部分添加权限。

 
    	
				
				
		
    

OK,接下来就万事具备,只差运行啦,试试吧。

上面的过程 都是我真实操作的,可以算是现场直播,试试吧。
 





Titanium Module 模块开发(二)蓝牙控制 Module,,

Titanium Module 模块开发(二)蓝牙控制 Module


推荐阅读
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • 基于layUI的图片上传前预览功能的2种实现方式
    本文介绍了基于layUI的图片上传前预览功能的两种实现方式:一种是使用blob+FileReader,另一种是使用layUI自带的参数。通过选择文件后点击文件名,在页面中间弹窗内预览图片。其中,layUI自带的参数实现了图片预览功能。该功能依赖于layUI的上传模块,并使用了blob和FileReader来读取本地文件并获取图像的base64编码。点击文件名时会执行See()函数。摘要长度为169字。 ... [详细]
  • Mac OS 升级到11.2.2 Eclipse打不开了,报错Failed to create the Java Virtual Machine
    本文介绍了在Mac OS升级到11.2.2版本后,使用Eclipse打开时出现报错Failed to create the Java Virtual Machine的问题,并提供了解决方法。 ... [详细]
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • 本文详细介绍了Linux中进程控制块PCBtask_struct结构体的结构和作用,包括进程状态、进程号、待处理信号、进程地址空间、调度标志、锁深度、基本时间片、调度策略以及内存管理信息等方面的内容。阅读本文可以更加深入地了解Linux进程管理的原理和机制。 ... [详细]
  • VueCLI多页分目录打包的步骤记录
    本文介绍了使用VueCLI进行多页分目录打包的步骤,包括页面目录结构、安装依赖、获取Vue CLI需要的多页对象等内容。同时还提供了自定义不同模块页面标题的方法。 ... [详细]
  • 本文介绍了一种轻巧方便的工具——集算器,通过使用集算器可以将文本日志变成结构化数据,然后可以使用SQL式查询。集算器利用集算语言的优点,将日志内容结构化为数据表结构,SPL支持直接对结构化的文件进行SQL查询,不再需要安装配置第三方数据库软件。本文还详细介绍了具体的实施过程。 ... [详细]
  • 实现一个通讯录系统,可添加、删除、修改、查找、显示、清空、排序通讯录信息
    本文介绍了如何实现一个通讯录系统,该系统可以实现添加、删除、修改、查找、显示、清空、排序通讯录信息的功能。通过定义结构体LINK和PEOPLE来存储通讯录信息,使用相关函数来实现各项功能。详细介绍了每个功能的实现方法。 ... [详细]
  • express工程中的json调用方法
    本文介绍了在express工程中如何调用json数据,包括建立app.js文件、创建数据接口以及获取全部数据和typeid为1的数据的方法。 ... [详细]
  • Webpack5内置处理图片资源的配置方法
    本文介绍了在Webpack5中处理图片资源的配置方法。在Webpack4中,我们需要使用file-loader和url-loader来处理图片资源,但是在Webpack5中,这两个Loader的功能已经被内置到Webpack中,我们只需要简单配置即可实现图片资源的处理。本文还介绍了一些常用的配置方法,如匹配不同类型的图片文件、设置输出路径等。通过本文的学习,读者可以快速掌握Webpack5处理图片资源的方法。 ... [详细]
  • C++字符字符串处理及字符集编码方案
    本文介绍了C++中字符字符串处理的问题,并详细解释了字符集编码方案,包括UNICODE、Windows apps采用的UTF-16编码、ASCII、SBCS和DBCS编码方案。同时说明了ANSI C标准和Windows中的字符/字符串数据类型实现。文章还提到了在编译时需要定义UNICODE宏以支持unicode编码,否则将使用windows code page编译。最后,给出了相关的头文件和数据类型定义。 ... [详细]
  • 本文介绍了如何使用Express App提供静态文件,同时提到了一些不需要使用的文件,如package.json和/.ssh/known_hosts,并解释了为什么app.get('*')无法捕获所有请求以及为什么app.use(express.static(__dirname))可能会提供不需要的文件。 ... [详细]
  • 本文介绍了Sencha Touch的学习使用心得,主要包括搭建项目框架的过程。作者强调了使用MVC模式的重要性,并提供了一个干净的引用示例。文章还介绍了Index.html页面的作用,以及如何通过链接样式表来改变全局风格。 ... [详细]
  • 从零基础到精通的前台学习路线
    随着互联网的发展,前台开发工程师成为市场上非常抢手的人才。本文介绍了从零基础到精通前台开发的学习路线,包括学习HTML、CSS、JavaScript等基础知识和常用工具的使用。通过循序渐进的学习,可以掌握前台开发的基本技能,并有能力找到一份月薪8000以上的工作。 ... [详细]
  • node.jsrequire和ES6导入导出的区别原 ... [详细]
author-avatar
电信学院团总支沈天宇
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有