支持蓝牙的打印机打印的打印机有那些

蓝牙打印-帮助中心
秦丝生意通手机app支持连接蓝牙打印机打印销售单据,并可对打印的单据格式进行设置!& 从底部菜单:“基础”--&右上角设置按钮--&“打印设置”:选择将要设置的打印单据,比如选择“销售单”:进入销售单打印模板设置后,可设置打印尺寸、页眉页脚、及显示字段等。设置完成后,在销售单页面(已经出售状态),点右上角省略号图标,再在弹出的菜单上点选“蓝牙打印”。初次连接蓝牙打印机时,需先搜索出蓝牙设备并进行配对,确保蓝牙打印机开机的情况下,如下所示,点选右上角刷新设备按钮。刷新后,点选您的蓝牙打印机设备,即可发送单据数据至蓝牙打印机打印出来。如果您想买蓝牙小票打印机,推荐到以下链接去购买,是经过我们秦丝技术人员专门测试挑选过的(主要是近期有些用户买了部分型号打印机后有些打印不了,目前我们是挑选一厂家合作,价格也相对其他淘宝价便宜的哦)!此外,秦丝推出针式打印机蓝牙适配器,大单、多联单等不再是电脑的专属,手机也可以想怎么打就怎么打,从此不再需要电脑:单片机、电路板
连接器、接插件
其他元器件
一种蓝牙打印机的实现方案
一种蓝牙打印机的实现方案
&&  作为一种短距离无线通信协议,蓝牙技术以其低成本、低功耗、高速率、方便灵活等特点在众多无线解决方案中脱颖而出。蓝牙10m的工作距离可以很好的满足大多数数字设备的应用场合,如办公室或家庭。打印机是常用的一个设备,摆脱打印机连线所带来的不便,实现无线打印,可以减少桌面上令人不快的电缆,并且可以将打印机远离主机任意搬动,摆放在房间中适合的位置。本文介绍一种用蓝牙技术来
&&  作为一种短距离无线通信协议,蓝牙技术以其低成本、低功耗、高速率、方便灵活等特点在众多无线解决方案中脱颖而出。蓝牙10m的工作距离可以很好的满足大多数数字设备的应用场合,如办公室或家庭。打印机是常用的一个设备,摆脱打印机连线所带来的不便,实现无线打印,可以减少桌面上令人不快的电缆,并且可以将打印机远离主机任意搬动,摆放在房间中适合的位置。本文介绍一种用蓝牙技术来实现主机与打印机的无线连接,实现遥控打印的方法。
&&  蓝牙打印机的设计方案
  设计的总体思路如图1所示:
图1 蓝牙打印机设计的总体思路
  在主机端用一单片机来仿真打印机进行工作,截取从主机并口传出的数据及控制信号,并通过蓝牙无线连接传送到打印机端。在打印机侧的单片机则根据所收到的蓝牙数据来仿真主机对打印机进行控制操作,从而实现打印机与主机的蓝牙无线连接。主机端的蓝牙作为主设备进行查询和发起连接,打印机端的蓝牙则作为从设备等待连接的建立。单片机采用89C2051,蓝牙芯片采用爱立信公司生产的支持点对点连接的ROK101-008。该模块内包括了无线部分、基带控制器、闪存、电源控制模块和内部时钟这五个主要部分,提供UART、PCM、I2C标准接口并内置晶振,其硬件框图如图2所示:
图2 Ericsson ROK 101 008 硬件框图
  该方案适用于具有Centronic并行接口的通用打印机。用户无须更改打印机的驱动程序,只需将含有单片机和蓝牙的两块板子分别连接到主机端和打印机上,就可以进行无线打印了。整个过程对于原打印机驱动程序是透明的,这样就为打印机用户提供了很大的方便。
&&  单片机对蓝牙模块的控制
图3 蓝牙HCI传输层示意图 
  蓝牙规范定义了主机控制接口(HCI),它为基带控制器、硬件控制器、硬件状态和控制寄存器等提供了标准的命令接口。主机通过HCI传输层将控制命令和数据发送给蓝牙模块,而蓝牙模块又通过HCI传输层将其状态信息及数据发还给主机。HCI传输层的主要目的是实现透明性。传输层不需要对主控制器驱动程序传送给主控制器的数据可见,这就使接口(HCI)或主控制器能在不影响传输层的基础上升级。
  如图3所示,在HCI传输层中至少传送4种不同类型的包&&HCI命令、HCI事件、ACL数据和SCL数据。每个HCI包都以HCI指示头开始,不同的指示头代表着不同类型的HCI包: 0x01 HCI指令分组 0x02 HCI ACL数据分组 0x03 HCI SCO数据分组 0x04 HCI事件分组
  传输层主要有下列3种:HCI USB ; HCI PCM; HCI UART。我们用单片机通过HCI-UART传输子层对蓝牙模块进行控制。连接的原理图如图4所示:
图4 单片机与蓝牙连接原理图
  一般来说,将单片机与蓝牙芯片在短距离内直接相连,便已可保证数据的可靠传输,也无须接CTS和RTS信号进行流量控制。单片机与蓝牙间的UART通信采用8位数据位,1位终止位,无奇偶校验,使用无类型小Endian格式,即最低位最先发送。UART通信格式及波特率均可通过单片机向蓝牙发送HCI指令来进行调整。ROK-101-008芯片最高可支持460.8Kbps的UART速率。发送给蓝牙模块的第一条HCI指令应该是软件复位(Soft Reset)命令,当蓝牙执行完一条指令后,将返回一个带有状态参数信息的命令完成事件(Command_Complete_Event),以告知主机(单片机)命令执行的情况。
  当完成软件复位后,要使得蓝牙模块做为从设备等待来自其他蓝牙设备的查询和连接发起,我们还需设置一些计时器的值,进行一系列的参数设定。即使是作为主设备的主机端蓝牙,在进行查询和建立连接之前也需要做上述的参数设定工作。这些需要设置的参数主要有下列几个: *Set Event Filter(设置事件过滤器) *Write Scan Enable(设置扫描参数,如是否可以进行查询和寻呼) *Write Authentication Enable(设置是否需要进行验证) *Write Page Timeout(设置寻呼超时,一般该值可以设为7s)
  打印机端的蓝牙模块在设置完上述各参数后便已经做好了从设备的准备,等待连接的建立。而在主机端的蓝牙模块还需进行查询(Inquiry)过程以取得远端设备的蓝牙地址,并根据查询得到的蓝牙地址来发起连接。一旦蓝牙连接被建立之后,便可以进行数据的收发,以实现蓝牙无线打印。
&&&  单片机与主机以及打印机的连接
  单片机和主机以及打印机的接口电路十分简单,以与打印机连接为例,电路如图5所示:
图5 单片机与打印机连接原理图
  将89C2051的P1口直接与打印机的数据口相连,用P3.7来采样打印机的BUSY信号。由于主机与打印机的连线一般较长,打印机一侧一般均有匹配电阻,因此作为STROBE信号输出的P3.3不能与打印机直接相连,这里我们用一与非门来增加驱动能力以实现控制。当单片机接收到主机通过蓝牙发送过来的数据后,在打印机侧模拟主机对打印机进行控制操作。首先将要发送给打印机的数据从P1口输出,随后从P3.3经过门电路反向产生一个负脉冲,作为选通信号发送给打印机,侦听P3.7上的BUSY信号,当该信号电平为低时,则表示本次数据已被打印机接收,可以发送下一个数据。
  以上方案并不涉及打印机的具体型号,也无须改变用户打印机的驱动程序,因而适用于大多数的通用打印机。这种用单片机通过UART传输层对蓝牙模块进行控制的方法,不仅仅适用于蓝牙打印机的研制,还适应于各类嵌入式的蓝牙系统。
&&  参考文献:
&&  1.Specifications of the Bluetooth System Version 1.1,http://www.bluetooth.com.
&&  2. Ericsson ROK 101 008 Data Sheet,http://www.ericsson.com.
&&  3.金纯等著,《蓝牙技术》,电子工业出版社,2001.
&&  4.李华等著,《MCS-51系列单片机实用接口技术》,北京航空航天大学出版社,1993.
型号/产品名惠普小印移动打印机/蓝牙打印机 | 惠普中国
搜索1676317 
惠普小印口袋照片打印机
每一印,爱上此刻。
通过多种方式记录难忘时刻,与好友分享每一段精彩时光。
从智能手机即时打印 2 x 3 英寸(5 x 7.6 厘米)的照片。
惠普小印 PLUS
从智能手机打印即时照片,现在可打印更大尺寸的照片。2
惠普小印二合一
从智能手机和即时相机打印 2 x 3 英寸(5 x 7.6 厘米)的照片。1
惠普小印应用
使用边框和表情符号自定义照片。1 扫描打印出来的照片,重温美妙的瞬间。1
移动打印简单易用
借助 Bluetooth(R) 连接,从智能手机进行连接和打印。2
口袋打印机
此款打印机小巧紧凑、轻巧便携,可轻松携带至任何地方。
惠普小印相纸
打印防污、防水的 2 x 3 英寸(5 x 7.6 厘米)彩色照片。2
惠普小印应用
移动打印简单易用
口袋打印机
惠普小印相纸
惠普小印应用
移动打印简单易用
口袋打印机
惠普小印相纸
惠普小印应用
使用边框和表情符号自定义照片。1 扫描打印出来的照片,重温美妙的瞬间。1
照片加大 30%4
打印 2.3 x 3.4 英寸(5.8 x 8.6 厘米)的照片,为珍藏您心之所爱腾出空间 — 与惠普小印相比大出 30%。
口袋打印机
此款打印机小巧紧凑、轻巧便携,可轻松携带至任何地方。
惠普小印 PLUS 相纸
打印防污、防水的 2.3 x 3.4 英寸(5.8 x 8.6 厘米)彩色照片。3
移动打印简单易用
借助 Bluetooth(R) 连接,从智能手机进行连接和打印。2
惠普小印应用
照片加大 30%4
口袋打印机
惠普小印 PLUS 相纸
移动打印简单易用
惠普小印应用
照片加大 30%4
口袋打印机
惠普小印 PLUS 相纸
移动打印简单易用
惠普小印应用
使用边框和表情符号自定义照片。1 扫描打印出来的照片,重温美妙的瞬间。1
移动打印简单易用
借助 Bluetooth(R) 连接,从智能手机进行连接和打印。2
相机与打印机二合一
借助内置的即时相机,在灵感闪现的一瞬间,立即打印照片。
此款打印机轻巧便携,大小与手机相当,几乎可携带至任何地方。
移动打印简单易用
借助 Bluetooth(R) 连接,从智能手机进行连接和打印。2
惠普小印应用
移动打印简单易用
相机与打印机二合一
惠普小印相纸
惠普小印应用
移动打印简单易用
相机与打印机二合一
惠普小印相纸
小印随时相伴
查看小印捕捉到的各地精彩体验。
Natalie Tasha 携手小印为您展示将即时照片添加到杂志中的乐趣,让您随身携带难忘的记忆。
Remi Ashten 携手小印为您展示DIY个性美照带来的美妙体验 。
了解小印如何帮助您实现探索自然的愿望,为您留下美妙的即时体验,供您随时回味。
查看小印如何记录生命的诞生,用一张即时照片,打造一生的回忆。
准备好踏上震撼体验之旅吧。观看小印拍摄的跳伞视频,尽享冒险之旅的瞬间快照。
更加个性化的应用体验
惠普小印应用
轻松打印您手机中的美照。1
扫描打印出来的照片,重温美妙的瞬间。1
轻松打造个性化贴纸。1
轻松打造个性化照片拼图。
随时关注消息中心,获得新信息。
操作非常简单!点击此处设置打印机并开启体验之旅。
立即下载惠普小印配套应用。
ios 系统下载
安卓系统下载
只有手机一般大小,揣进兜里随便带。1
个性化打印
使用滤镜、相框、文字等,让照片更有趣
打印手机中的美照
通过Sprocket应用程序即刻打印手机中的照片
2 x 3 英寸(5 x 7.6 厘米)相纸
相纸适用于惠普小印和惠普小印二合一口袋照片打印机
相纸加大 30%2
相纸适用于惠普小印 Plus。
popUpSRBeginingLabelString选择国家/地区和语言单击或使用 Tab 键选择您所在的国家/地区popUpSREndingLabelString 购买方式
HP 合作伙伴 保持连接&nbsp>&nbsp
&nbsp>&nbsp
&nbsp>&nbsp
安卓手机连接蓝牙打印机实现打印功能
摘要:做一个安卓应用,其中有一个需求是要求用蓝牙连接打印机实现打印功能。一开始没有一点头绪,网上找了很多资料也找不到有用的数据。所以自己就去研究,最终,功夫不负有心人,顺利的完成了这个功能。下边贴出我写的代码,共有需要的IT哥们参考学习。我们先看看运行效果图吧。。。1.这是主界面的效果图android:id=&@+id/searchDevices&android:layout_width=&match_parent&android:layou
做一个安卓应用,其中有一个需求是要求用蓝牙连接打印机实现打印功能。一开始没有一点头绪,网上找了很多资料也找不到有用的数据。所以自己就去研究,最终,功夫不负有心人,顺利的完成了这个功能。下边贴出我写的代码,共有需要的IT哥们参考学习。
我们先看看运行效果图吧。。。
1.这是主界面的效果图
android:id=&@+id/searchDevices&
android:layout_width=&match_parent&
android:layout_height=&wrap_content&
android:layout_alignParentLeft=&true&
android:layout_below=&@+id/openBluetooth_tb&
android:layout_marginTop=&20dp&
android:text=&搜索设备&/&
android:layout_width=&match_parent&
android:layout_height=&3dp&
android:layout_alignParentLeft=&true&
android:layout_below=&@+id/searchDevices&
android:background=&@android:color/darker_gray&/&
<linearlayout
android:id=&@+id/linearLayout1&
android:layout_width=&match_parent&
android:layout_height=&150dp&
android:layout_marginTop=&125dp&
android:orientation=&vertical&&
android:layout_width=&match_parent&
android:layout_height=&wrap_content&
android:text=&未配对设备&/&
android:id=&@+id/unbondDevices&
android:layout_width=&wrap_content&
android:layout_height=&wrap_content&/&
android:layout_width=&match_parent&
android:layout_height=&3dp&
android:layout_alignParentLeft=&true&
android:layout_below=&@+id/searchDevices&
android:layout_marginTop=&160dp&
android:background=&@android:color/darker_gray&/&
<linearlayout
android:layout_width=&match_parent&
android:layout_height=&190dp&
android:layout_marginTop=&288dp&
android:orientation=&vertical&&
android:layout_width=&match_parent&
android:layout_height=&wrap_content&
android:text=&已配对设备&/&
android:id=&@+id/bondDevices&
android:layout_width=&wrap_content&
android:layout_height=&wrap_content&
android:layout_alignParentLeft=&true&
android:layout_below=&@+id/linearLayout1&&
android:id=&@+id/return_Bluetooth_btn&
android:layout_width=&100dp&
android:layout_height=&wrap_content&
android:layout_above=&@+id/searchDevices&
android:layout_alignParentLeft=&true&
android:text=&返回&/&从上边的布局文件中不难看出,其中有两个ListView,OK,那下边贴出对应的两个item布局文件
--& 第一个item:unbonddevice_item.xml [html]view plaincopy
&?xmlversion=&1.0&encoding=&utf-8&?&
<relativelayout
android:layout_width=&match_parent&
android:layout_height=&match_parent&&
android:id=&@+id/device_name&
android:layout_width=&match_parent&
android:layout_height=&wrap_content&
android:layout_alignParentLeft=&true&
android:layout_alignParentTop=&true&
android:text=&未绑定设备&
android:textAppearance=&?android:attr/textAppearanceLarge&/&
--&第二个item:bonddevice_item.xml
[html]view plaincopy
&?xmlversion=&1.0&encoding=&utf-8&?&
<relativelayout
android:layout_width=&match_parent&
android:layout_height=&match_parent&&
android:id=&@+id/device_name&
android:layout_width=&match_parent&
android:layout_height=&wrap_content&
android:layout_alignParentLeft=&true&
android:layout_alignParentTop=&true&
android:text=&已绑定设备&
android:textAppearance=&?android:attr/textAppearanceLarge&/&
2.还有另外一个布局文件,就是当点击已绑定蓝牙设备下边的某个item时进入打印的界面,不多说,看图!
android:id=&@+id/connect_state&
android:layout_width=&wrap_content&
android:layout_height=&wrap_content&
android:layout_alignBaseline=&@+id/device_name&
android:layout_alignBottom=&@+id/device_name&
android:layout_marginLeft=&42dp&
android:layout_toRightOf=&@+id/device_name&
android:text=&LargeText&
android:textAppearance=&?android:attr/textAppearanceLarge&/&
android:id=&@+id/send&
android:layout_width=&match_parent&
android:layout_height=&wrap_content&
android:layout_alignParentLeft=&true&
android:layout_below=&@+id/print_data&
android:layout_marginTop=&21dp&
android:text=&打印&/&<button
android:id=&@+id/command&
android:layout_width=&match_parent&
android:layout_height=&wrap_content&
android:layout_alignParentLeft=&true&
android:layout_below=&@+id/send&
android:text=&指令&/&
至此,布局文件就搞定了,接下来就要编写java代码了。主要有一下这么几个类,一个一个来哈 BluetoothActivity.Java 这个类的主要作用是初始化主界面,看代码 [java]view plaincopy publicclassBluetoothActivityextendsActivity{
privateContextcontext=publicvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
this.context=
setTitle(&蓝牙打印&);
setContentView(R.layout.bluetooth_layout);
this.initListener();
}privatevoidinitListener(){
ListViewunbondDevices=(ListView)this
.findViewById(R.id.unbondDevices);
ListViewbondDevices=(ListView)this.findViewById(R.id.bondDevices);
ButtonswitchBT=(Button)this.findViewById(R.id.openBluetooth_tb);
ButtonsearchDevices=(Button)this.findViewById(R.id.searchDevices);BluetoothActionbluetoothAction=newBluetoothAction(this.context,
unbondDevices,bondDevices,switchBT,searchDevices,
BluetoothActivity.this);ButtonreturnButton=(Button)this
.findViewById(R.id.return_Bluetooth_btn);
bluetoothAction.setSearchDevices(searchDevices);
bluetoothAction.initView();switchBT.setOnClickListener(bluetoothAction);
searchDevices.setOnClickListener(bluetoothAction);
returnButton.setOnClickListener(bluetoothAction);
//屏蔽返回键的代码:
publicbooleanonKeyDown(intkeyCode,KeyEventevent)
switch(keyCode)
caseKeyEvent.KEYCODE_BACK:
returnsuper.onKeyDown(keyCode,event);
BluetoothAction.java
这个类顾名思义,是处理bluetoothActivity中各种操作事件的action类,看代码 [java]view plaincopy
publicclassBluetoothActionimplementsOnClickListener{privateButtonswitchBT=
privateButtonsearchDevices=
privateActivityactivity=privateListViewunbondDevices=
privateListViewbondDevices=
privateContextcontext=
privateBluetoothServicebluetoothService=publicBluetoothAction(Contextcontext,ListViewunbondDevices,
ListViewbondDevices,ButtonswitchBT,ButtonsearchDevices,
Activityactivity){
this.context=
this.unbondDevices=unbondD
this.bondDevices=bondD
this.switchBT=switchBT;
this.searchDevices=searchD
this.activity=
this.bluetoothService=newBluetoothService(this.context,
this.unbondDevices,this.bondDevices,this.switchBT,
this.searchDevices);
}publicvoidsetSwitchBT(ButtonswitchBT){
this.switchBT=switchBT;
}publicvoidsetSearchDevices(ButtonsearchDevices){
this.searchDevices=searchD
}publicvoidsetUnbondDevices(ListViewunbondDevices){
this.unbondDevices=unbondD
*初始化界面
publicvoidinitView(){if(this.bluetoothService.isOpen()){
System.out.println(&蓝牙有开!&);
switchBT.setText(&关闭蓝牙&);
if(!this.bluetoothService.isOpen()){
System.out.println(&蓝牙没开!&);
this.searchDevices.setEnabled(false);
}privatevoidsearchDevices(){
bluetoothService.searchDevices();
*各种按钮的监听
publicvoidonClick(Viewv){
if(v.getId()==R.id.searchDevices){
this.searchDevices();
}elseif(v.getId()==R.id.return_Bluetooth_btn){
activity.finish();
}elseif(v.getId()==R.id.openBluetooth_tb){
if(!this.bluetoothService.isOpen()){
//蓝牙关闭的情况
System.out.println(&蓝牙关闭的情况&);
this.bluetoothService.openBluetooth(activity);
//蓝牙打开的情况
System.out.println(&蓝牙打开的情况&);
this.bluetoothService.closeBluetooth();}}
这个类会把各种请求动作分门别类,交给BluetoothService.java来处理,看代码
[java]view plaincopy
publicclassBluetoothService{
privateContextcontext=
privateBluetoothAdapterbluetoothAdapter=BluetoothAdapter
.getDefaultAdapter();
privateArrayList
unbondDevices=//用于存放未配对蓝牙设备
privateArrayList
bondDevices=//用于存放已配对蓝牙设备
privateButtonswitchBT=
privateButtonsearchDevices=
privateListViewunbondDevicesListView=
privateListViewbondDevicesListView=/**
*添加已绑定蓝牙设备到ListView
privatevoidaddBondDevicesToListView(){
&data=newArrayList
intcount=this.bondDevices.size();
System.out.println(&已绑定设备数量:&+count);
for(inti=0;i
map=newHashMap
map.put(&deviceName&,this.bondDevices.get(i).getName());
data.add(map);//把item项的数据加到data中
String[]from={&deviceName&};
int[]to={R.id.device_name};
SimpleAdaptersimpleAdapter=newSimpleAdapter(this.context,data,
R.layout.bonddevice_item,from,to);
//把适配器装载到listView中
this.bondDevicesListView.setAdapter(simpleAdapter);this.bondDevicesListView
.setOnItemClickListener(newOnItemClickListener(){@Override
publicvoidonItemClick(AdapterView&?&arg0,Viewarg1,
intarg2,longarg3){
BluetoothDevicedevice=bondDevices.get(arg2);
Intentintent=newIntent();
intent.setClassName(context,
&com.lifeng.jdxt.view.PrintDataActivity&);
intent.putExtra(&deviceAddress&,device.getAddress());
context.startActivity(intent);
*添加未绑定蓝牙设备到ListView
privatevoidaddUnbondDevicesToListView(){
&data=newArrayList
intcount=this.unbondDevices.size();
System.out.println(&未绑定设备数量:&+count);
for(inti=0;i
map=newHashMap
map.put(&deviceName&,this.unbondDevices.get(i).getName());
data.add(map);//把item项的数据加到data中
String[]from={&deviceName&};
int[]to={R.id.device_name};
SimpleAdaptersimpleAdapter=newSimpleAdapter(this.context,data,
R.layout.unbonddevice_item,from,to);//把适配器装载到listView中
this.unbondDevicesListView.setAdapter(simpleAdapter);//为每个item绑定监听,用于设备间的配对
this.unbondDevicesListView
.setOnItemClickListener(newOnItemClickListener(){@Override
publicvoidonItemClick(AdapterView&?&arg0,Viewarg1,
intarg2,longarg3){
MethodcreateBondMethod=BluetoothDevice.class
.getMethod(&createBond&);
createBondMethod
.invoke(unbondDevices.get(arg2));
//将绑定好的设备添加的已绑定list集合
bondDevices.add(unbondDevices.get(arg2));
//将绑定好的设备从未绑定list集合中移除
unbondDevices.remove(arg2);
addBondDevicesToListView();
addUnbondDevicesToListView();
}catch(Exceptione){
Toast.makeText(context,&配对失败!&,Toast.LENGTH_SHORT)
}publicBluetoothService(Contextcontext,ListViewunbondDevicesListView,
ListViewbondDevicesListView,ButtonswitchBT,ButtonsearchDevices){
this.context=
this.unbondDevicesListView=unbondDevicesListV
this.bondDevicesListView=bondDevicesListV
//this.bluetoothAdapter=BluetoothAdapter.getDefaultAdapter();
this.unbondDevices=newArrayList
this.bondDevices=newArrayList
this.switchBT=switchBT;
this.searchDevices=searchD
this.initIntentFilter();}privatevoidinitIntentFilter(){
//设置广播信息过滤
IntentFilterintentFilter=newIntentFilter();
intentFilter.addAction(BluetoothDevice.ACTION_FOUND);
intentFilter.addAction(BluetoothAdapter.ACTION_DISCOVERY_STARTED);
intentFilter.addAction(BluetoothAdapter.ACTION_DISCOVERY_FINISHED);
intentFilter.addAction(BluetoothAdapter.ACTION_STATE_CHANGED);
//注册广播接收器,接收并处理搜索结果
context.registerReceiver(receiver,intentFilter);}/**
publicvoidopenBluetooth(Activityactivity){
IntentenableBtIntent=newIntent(
BluetoothAdapter.ACTION_REQUEST_ENABLE);
activity.startActivityForResult(enableBtIntent,1);}/**
publicvoidcloseBluetooth(){
this.bluetoothAdapter.disable();
*判断蓝牙是否打开
*@returnboolean
publicbooleanisOpen(){
returnthis.bluetoothAdapter.isEnabled();}/**
*搜索蓝牙设备
publicvoidsearchDevices(){
this.bondDevices.clear();
this.unbondDevices.clear();//寻找蓝牙设备,android会将查找到的设备以广播形式发出去
this.bluetoothAdapter.startDiscovery();
*添加未绑定蓝牙设备到list集合
*@paramdevice
publicvoidaddUnbondDevices(BluetoothDevicedevice){
System.out.println(&未绑定设备名称:&+device.getName());
if(!this.unbondDevices.contains(device)){
this.unbondDevices.add(device);
*添加已绑定蓝牙设备到list集合
*@paramdevice
publicvoidaddBandDevices(BluetoothDevicedevice){
System.out.println(&已绑定设备名称:&+device.getName());
if(!this.bondDevices.contains(device)){
this.bondDevices.add(device);
*蓝牙广播接收器
privateBroadcastReceiverreceiver=newBroadcastReceiver(){ProgressDialogprogressDialog=@Override
publicvoidonReceive(Contextcontext,Intentintent){
Stringaction=intent.getAction();
if(BluetoothDevice.ACTION_FOUND.equals(action)){
BluetoothDevicedevice=intent
.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
if(device.getBondState()==BluetoothDevice.BOND_BONDED){
addBandDevices(device);
addUnbondDevices(device);
}elseif(BluetoothAdapter.ACTION_DISCOVERY_STARTED.equals(action)){
progressDialog=ProgressDialog.show(context,&请稍等...&,
&搜索蓝牙设备中...&,true);}elseif(BluetoothAdapter.ACTION_DISCOVERY_FINISHED
.equals(action)){
System.out.println(&设备搜索完毕&);
progressDialog.dismiss();addUnbondDevicesToListView();
addBondDevicesToListView();
//bluetoothAdapter.cancelDiscovery();
if(BluetoothAdapter.ACTION_STATE_CHANGED.equals(action)){
if(bluetoothAdapter.getState()==BluetoothAdapter.STATE_ON){
System.out.println(&--------打开蓝牙-----------&);
switchBT.setText(&关闭蓝牙&);
searchDevices.setEnabled(true);
bondDevicesListView.setEnabled(true);
unbondDevicesListView.setEnabled(true);
}elseif(bluetoothAdapter.getState()==BluetoothAdapter.STATE_OFF){
System.out.println(&--------关闭蓝牙-----------&);
switchBT.setText(&打开蓝牙&);
searchDevices.setEnabled(false);
bondDevicesListView.setEnabled(false);
unbondDevicesListView.setEnabled(false);
到这里,第一个界面的代码就写完了,当我们点击要打印的蓝牙设备时就会跳转到打印页面,跳转代码在BluetoothService.java的addBondDevicesToListView()中
接下来让我们来看看第二个界面的代码,结构和第一个界面的代码一样,分类三个类,请看代码。。。。。
PrintDataActivity.java
[java]view plaincopy
publicclassPrintDataActivityextendsActivity{
privateContextcontext=publicvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
this.setTitle(&蓝牙打印&);
this.setContentView(R.layout.printdata_layout);
this.context=
this.initListener();
*获得从上一个Activity传来的蓝牙地址
*@returnString
privateStringgetDeviceAddress(){
//直接通过Context类的getIntent()即可获取Intent
Intentintent=this.getIntent();
if(intent!=null){
returnintent.getStringExtra(&deviceAddress&);
}privatevoidinitListener(){
TextViewdeviceName=(TextView)this.findViewById(R.id.device_name);
TextViewconnectState=(TextView)this
.findViewById(R.id.connect_state);PrintDataActionprintDataAction=newPrintDataAction(this.context,
this.getDeviceAddress(),deviceName,connectState);EditTextprintData=(EditText)this.findViewById(R.id.print_data);
Buttonsend=(Button)this.findViewById(R.id.send);
Buttoncommand=(Button)this.findViewById(R.id.command);
printDataAction.setPrintData(printData);send.setOnClickListener(printDataAction);
command.setOnClickListener(printDataAction);
}@Override
protectedvoidonDestroy(){
PrintDataService.disconnect();
super.onDestroy();
PrintDataAction.java
[java]view plaincopy
publicclassPrintDataActionimplementsOnClickListener{
privateContextcontext=
privateTextViewdeviceName=
privateTextViewconnectState=
privateEditTextprintData=
privateStringdeviceAddress=
privatePrintDataServiceprintDataService=publicPrintDataAction(Contextcontext,StringdeviceAddress,
TextViewdeviceName,TextViewconnectState){
this.context=
this.deviceAddress=deviceA
this.deviceName=deviceN
this.connectState=connectS
this.printDataService=newPrintDataService(this.context,
this.deviceAddress);
this.initView();}privatevoidinitView(){
//设置当前设备名称
this.deviceName.setText(this.printDataService.getDeviceName());
//一上来就先连接蓝牙设备
booleanflag=this.printDataService.connect();
if(flag==false){
//连接失败
this.connectState.setText(&连接失败!&);
//连接成功
this.connectState.setText(&连接成功!&);}
}publicvoidsetPrintData(EditTextprintData){
this.printData=printD
}@Override
publicvoidonClick(Viewv){
if(v.getId()==R.id.send){
StringsendData=this.printData.getText().toString();
this.printDataService.send(sendData+&/n&);
}elseif(v.getId()==R.id.command){
this.printDataService.selectCommand();}
PrintDataService.java
[java]view plaincopy
publicclassPrintDataService{
privateContextcontext=
privateStringdeviceAddress=
privateBluetoothAdapterbluetoothAdapter=BluetoothAdapter
.getDefaultAdapter();
privateBluetoothDevicedevice=
privatestaticBluetoothSocketbluetoothSocket=
privatestaticOutputStreamoutputStream=
privatestaticfinalUUIDuuid=UUID
.fromString(&0-805F9B34FB&);
privatebooleanisConnection=
finalString[]items={&复位打印机&,&标准ASCII字体&,&压缩ASCII字体&,&字体不放大&,
&宽高加倍&,&取消加粗模式&,&选择加粗模式&,&取消倒置打印&,&选择倒置打印&,&取消黑白反显&,&选择黑白反显&,
&取消顺时针旋转90&&,&选择顺时针旋转90&&};
finalbyte[][]byteCommands={{0x1b,0x40},//复位打印机
{0x1b,0x4d,0x00},//标准ASCII字体
{0x1b,0x4d,0x01},//压缩ASCII字体
{0x1d,0x21,0x00},//字体不放大
{0x1d,0x21,0x11},//宽高加倍
{0x1b,0x45,0x00},//取消加粗模式
{0x1b,0x45,0x01},//选择加粗模式
{0x1b,0x7b,0x00},//取消倒置打印
{0x1b,0x7b,0x01},//选择倒置打印
{0x1d,0x42,0x00},//取消黑白反显
{0x1d,0x42,0x01},//选择黑白反显
{0x1b,0x56,0x00},//取消顺时针旋转90&
{0x1b,0x56,0x01},//选择顺时针旋转90&
};publicPrintDataService(Contextcontext,StringdeviceAddress){
this.context=
this.deviceAddress=deviceA
this.device=this.bluetoothAdapter.getRemoteDevice(this.deviceAddress);
*获取设备名称
*@returnString
publicStringgetDeviceName(){
returnthis.device.getName();
*连接蓝牙设备
publicbooleanconnect(){
if(!this.isConnection){
bluetoothSocket=this.device
.createRfcommSocketToServiceRecord(uuid);
bluetoothSocket.connect();
outputStream=bluetoothSocket.getOutputStream();
this.isConnection=
if(this.bluetoothAdapter.isDiscovering()){
System.out.println(&关闭适配器!&);
this.bluetoothAdapter.isDiscovering();
}catch(Exceptione){
Toast.makeText(this.context,&连接失败!&,1).show();
Toast.makeText(this.context,this.device.getName()+&连接成功!&,
Toast.LENGTH_SHORT).show();
*断开蓝牙设备连接
publicstaticvoiddisconnect(){
System.out.println(&断开蓝牙设备连接&);
bluetoothSocket.close();
outputStream.close();
}catch(IOExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
publicvoidselectCommand(){
newAlertDialog.Builder(context).setTitle(&请选择指令&)
.setItems(items,newDialogInterface.OnClickListener(){
publicvoidonClick(DialogInterfacedialog,intwhich){
outputStream.write(byteCommands[which]);
}catch(IOExceptione){
Toast.makeText(context,&设置指令失败!&,
Toast.LENGTH_SHORT).show();
}).create().show();
publicvoidsend(StringsendData){
if(this.isConnection){
System.out.println(&开始打印!!&);
byte[]data=sendData.getBytes(&gbk&);
outputStream.write(data,0,data.length);
outputStream.flush();
}catch(IOExceptione){
Toast.makeText(this.context,&发送失败!&,Toast.LENGTH_SHORT)
Toast.makeText(this.context,&设备未连接,请重新连接!&,Toast.LENGTH_SHORT)
注册Activity
[html]view plaincopy
以上是的内容,更多
的内容,请您使用右上方搜索功能获取相关信息。
若你要投稿、删除文章请联系邮箱:zixun-group@service.aliyun.com,工作人员会在五个工作日内给你回复。
新用户大礼包!
现在注册,免费体验40+云产品,及域名优惠!
云服务器 ECS
可弹性伸缩、安全稳定、简单易用
&40.8元/月起
预测未发生的攻击
&24元/月起
你可能还喜欢
你可能感兴趣
阿里云教程中心为您免费提供
安卓手机连接蓝牙打印机实现打印功能相关信息,包括
的信息,所有安卓手机连接蓝牙打印机实现打印功能相关内容均不代表阿里云的意见!投稿删除文章请联系邮箱:zixun-group@service.aliyun.com,工作人员会在五个工作日内答复
售前咨询热线
支持与服务
资源和社区
关注阿里云
International}

我要回帖

更多关于 打印机突然不能打印了 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信