java 安卓蓝牙程序_求Java大神帮忙,简单修改下安卓蓝牙串口输出程序代码!!急...
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
附上蓝牙串口通讯代码,
package com.test.BTClient;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.UUID;
import com.test.BTClient.DeviceListActivity;
import android.app.Activity;
import android.app.AlertDialog;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.bluetooth.BluetoothSocket;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.os.Environment;
import android.os.Handler;
import android.os.Message;
import android.view.LayoutInflater;
//import android.view.Menu; //如使用菜单加入此三包
//import android.view.MenuInflater;
//import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ScrollView;
import android.widget.TextView;
import android.widget.Toast;
public class BTClient extends Activity {
private final static int REQUEST_CONNECT_DEVICE = 1; //宏定义查询设备句柄
private final static String MY_UUID = "00001101-0000-1000-8000-00805F9B34FB"; //SPP服务UUID号
private InputStream is; //输入流,用来接收蓝牙数据
//private TextView text0; //提示栏解句柄
private EditText edit0; //发送数据输入句柄
private TextView dis; //接收数据显示句柄
private ScrollView sv; //翻页句柄
private String smsg = ""; //显示用数据缓存
private String fmsg = ""; //保存用数据缓存
public String filename=""; //用来保存存储的文件名
BluetoothDevice _device = null; //蓝牙设备
BluetoothSocket _socket = null; //蓝牙通信socket
boolean _discoveryFinished = false;
boolean bRun = true;
boolean bThread = false;
private BluetoothAdapter _bluetooth = BluetoothAdapter.getDefaultAdapter(); //获取本地蓝牙适配器,即蓝牙设备
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main); //设置画面为主画面 main.xml
//text0 = (TextView)findViewById(R.id.Text0); //得到提示栏句柄
edit0 = (EditText)findViewById(R.id.Edit0); //得到输入框句柄
sv = (ScrollView)findViewById(R.id.ScrollView01); //得到翻页句柄
dis = (TextView) findViewById(R.id.in); //得到数据显示句柄
//如果打开本地蓝牙设备不成功,提示信息,结束程序
if (_bluetooth == null){
Toast.makeText(this, "无法打开手机蓝牙,请确认手机是否有蓝牙功能!", Toast.LENGTH_LONG).show();
finish();
return;
}
// 设置设备可以被搜索
new Thread(){
public void run(){
if(_bluetooth.isEnabled()==false){
_bluetooth.enable();
}
}
}.start();
}
//发送按键响应
public void onSendButtonClicked(View v){
int i=0;
int n=0;
try{
OutputStream os = _socket.getOutputStream(); //蓝牙连接输出流
byte[] bos = edit0.getText().toString().getBytes();
for(i=0;i
if(bos[i]==0x0a)n++;
}
byte[] bos_new = new byte[bos.length+n];
n=0;
for(i=0;i
if(bos[i]==0x0a){
bos_new[n]=0x0d;
n++;
bos_new[n]=0x0a;
}else{
bos_new[n]=bos[i];
}
n++;
}
os.write(bos_new);
}catch(IOException e){
}
}
//接收活动结果,响应startActivityForResult()
public void onActivityResult(int requestCode, int resultCode, Intent data) {
switch(requestCode){
case REQUEST_CONNECT_DEVICE: //连接结果,由DeviceListActivity设置返回
// 响应返回结果
if (resultCode == Activity.RESULT_OK) { //连接成功,由DeviceListActivity设置返回
// MAC地址,由DeviceListActivity设置返回
String address = data.getExtras()
.getString(DeviceListActivity.EXTRA_DEVICE_ADDRESS);
// 得到蓝牙设备句柄
_device = _bluetooth.getRemoteDevice(address);
// 用服务号得到socket
try{
_socket = _device.createRfcommSocketToServiceRecord(UUID.fromString(MY_UUID));
}catch(IOException e){
Toast.makeText(this, "连接失败!", Toast.LENGTH_SHORT).show();
}
//连接socket
Button btn = (Button) findViewById(R.id.Button03);
try{
_socket.connect();
Toast.makeText(this, "连接"+_device.getName()+"成功!", Toast.LENGTH_SHORT).show();
btn.setText("断开");
}catch(IOException e){
try{
Toast.makeText(this, "连接失败!", Toast.LENGTH_SHORT).show();
_socket.close();
_socket = null;
}catch(IOException ee){
Toast.makeText(this, "连接失败!", Toast.LENGTH_SHORT).show();
}
return;
}
//打开接收线程
try{
is = _socket.getInputStream(); //得到蓝牙数据输入流
}catch(IOException e){
Toast.makeText(this, "接收数据失败!", Toast.LENGTH_SHORT).show();
return;
}
if(bThread==false){
ReadThread.start();
bThread=true;
}else{
bRun = true;
}
}
break;
default:break;
}
}
//接收数据线程
Thread ReadThread=new Thread(){
public void run(){
int num = 0;
byte[] buffer = new byte[1024];
byte[] buffer_new = new byte[1024];
int i = 0;
int n = 0;
bRun = true;
//接收线程
while(true){
try{
while(is.available()==0){
while(bRun == false){}
}
while(true){
num = is.read(buffer); //读入数据
n=0;
String s0 = new String(buffer,0,num);
fmsg+=s0; //保存收到数据
for(i=0;i
if((buffer[i] == 0x0d)&&(buffer[i+1]==0x0a)){
buffer_new[n] = 0x0a;
i++;
}else{
buffer_new[n] = buffer[i];
}
n++;
}
String s = new String(buffer_new,0,n);
smsg+=s; //写入接收缓存
if(is.available()==0)break; //短时间没有数据才跳出进行显示
}
//发送显示消息,进行显示刷新
handler.sendMessage(handler.obtainMessage());
}catch(IOException e){
}
}
}
};
//消息处理队列
Handler handler= new Handler(){
public void handleMessage(Message msg){
super.handleMessage(msg);
dis.setText(smsg); //显示数据
sv.scrollTo(0,dis.getMeasuredHeight()); //跳至数据最后一页
}
};
//关闭程序掉用处理部分
public void onDestroy(){
super.onDestroy();
if(_socket!=null) //关闭连接socket
try{
_socket.close();
}catch(IOException e){}
//_bluetooth.disable(); //关闭蓝牙服务
}
//菜单处理部分
/* @Override
public boolean onCreateOptionsMenu(Menu menu) {//建立菜单
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.option_menu, menu);
return true;
}*/
/* @Override
public boolean onOptionsItemSelected(MenuItem item) { //菜单响应函数
switch (item.getItemId()) {
case R.id.scan:
if(_bluetooth.isEnabled()==false){
Toast.makeText(this, "Open BT......", Toast.LENGTH_LONG).show();
return true;
}
// Launch the DeviceListActivity to see devices and do scan
Intent serverIntent = new Intent(this, DeviceListActivity.class);
startActivityForResult(serverIntent, REQUEST_CONNECT_DEVICE);
return true;
case R.id.quit:
finish();
return true;
case R.id.clear:
smsg="";
ls.setText(smsg);
return true;
case R.id.save:
Save();
return true;
}
return false;
}*/
//连接按键响应函数
public void onConnectButtonClicked(View v){
if(_bluetooth.isEnabled()==false){ //如果蓝牙服务不可用则提示
Toast.makeText(this, " 打开蓝牙中...", Toast.LENGTH_LONG).show();
return;
}
//如未连接设备则打开DeviceListActivity进行设备搜索
Button btn = (Button) findViewById(R.id.Button03);
if(_socket==null){
Intent serverIntent = new Intent(this, DeviceListActivity.class); //跳转程序设置
startActivityForResult(serverIntent, REQUEST_CONNECT_DEVICE); //设置返回宏定义
}
else{
//关闭连接socket
try{
is.close();
_socket.close();
_socket = null;
bRun = false;
btn.setText("连接");
}catch(IOException e){}
}
return;
}
//保存按键响应函数
public void onSaveButtonClicked(View v){
Save();
}
//清除按键响应函数
public void onClearButtonClicked(View v){
smsg="";
fmsg="";
dis.setText(smsg);
return;
}
//退出按键响应函数
public void onQuitButtonClicked(View v){
finish();
}
//保存功能实现
private void Save() {
//显示对话框输入文件名
LayoutInflater factory = LayoutInflater.from(BTClient.this); //图层模板生成器句柄
final View DialogView = factory.inflate(R.layout.sname, null); //用sname.xml模板生成视图模板
new AlertDialog.Builder(BTClient.this)
.setTitle("文件名")
.setView(DialogView) //设置视图模板
.setPositiveButton("确定",
new DialogInterface.OnClickListener() //确定按键响应函数
{
public void onClick(DialogInterface dialog, int whichButton){
EditText text1 = (EditText)DialogView.findViewById(R.id.sname); //得到文件名输入框句柄
filename = text1.getText().toString(); //得到文件名
try{
if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){ //如果SD卡已准备好
filename =filename+".txt"; //在文件名末尾加上.txt
File sdCardDir = Environment.getExternalStorageDirectory(); //得到SD卡根目录
File BuildDir = new File(sdCardDir, "/data"); //打开data目录,如不存在则生成
if(BuildDir.exists()==false)BuildDir.mkdirs();
File saveFile =new File(BuildDir, filename); //新建文件句柄,如已存在仍新建文档
FileOutputStream stream = new FileOutputStream(saveFile); //打开文件输入流
stream.write(fmsg.getBytes());
stream.close();
Toast.makeText(BTClient.this, "存储成功!", Toast.LENGTH_SHORT).show();
}else{
Toast.makeText(BTClient.this, "没有存储卡!", Toast.LENGTH_LONG).show();
}
}catch(IOException e){
return;
}
}
})
.setNegativeButton("取消", //取消按键响应函数,直接退出对话框不做任何处理
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
}
}).show(); //显示对话框
}
}
java 安卓蓝牙程序_求Java大神帮忙,简单修改下安卓蓝牙串口输出程序代码!!急...相关推荐
- aoc显示器开机显示计算机,_求各路大神帮忙解决,配置如下 电脑开机AOC显示器显示无信号,每次都要重新拔了再插才有画面_...
网友求助:_求各路大神帮忙解决,配置如下 电脑开机AOC显示器显示无信号,每次都要重新拔了再插才有画面_ 问题求各路大神帮忙解决,配置如下 电脑开机AOC显示器显示无信号,每次都要重新拔了再插才有画面 ...
- html英文模板显示中文,网上下的网站模板,用dreamweaver修改字体后,我如果用搜狗打进去汉字就显示乱码,但如果我打的是英文就能显示,不知道怎么解决,求各位大神帮忙。...
网上下的网站模板,用dreamweaver修改字体后,我如果用搜狗打进去汉字就显示乱码,但如果我打的是英文就能显示,不知道怎么解决,有没有知道是什么情况,求各位大神帮忙. Photographica- ...
- java数据类型入门程序_「JAVA零基础入门系列」Day3 Java基本数据类型
前两篇已经将开发环境搭建完成,如果你已经按之前的教程按部就班的完成了部署,那么世界上最优秀的编程语言之一和世界上最优秀的IDE之一已经出现在你的电脑上(此处应有掌声),如果你还没入门,或者正在台阶上踱 ...
- 在JAVA中 以下程序_在Java中,以下程序的输出结果是()_学小易找答案
[单选题]运行以下Java代码,说法正确的是( ). [单选题]在Java中,以下程序的输出结果是() [单选题]利用"出声"的方式向学生展示教师分析问题的过程与方法的教学方法是_ ...
- java编写应用程序_使用Java API编写应用程序
java编写应用程序 总览 介绍 DB2JSON可用于DB2 Linux,Unix和Windows 10.5以及用于z / OS V3.1的IBM DB2 Accessories Suite与DB2 ...
- java简易画图工具_求Java简单画图工具
展开全部 ///保存一个pb.java文件直接编译执e68a8462616964757a686964616f31333262363631行 import java.applet.*; import j ...
- Java中settext是什么意思_求问大神【textField.setText(0);是什么意思】
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 package 连连看; import java.awt.*; import java.awt.event.KeyEvent; import java.a ...
- java一元二次方程求解_求JAVA解一元二次方程的程序。
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 public class Test2 { //如果要求条件多,那就自己加上就行了.这里不过a == 0或者b ==0情况.自己可以加上 public st ...
- java借口不同程序_「JAVA」多态的灵魂,面向接口的程序设计,这才是你该懂得的接口(interface)...
Java面向对象之接口--interface 什么是接口 一般计算机中的接口分为硬件接口和软件接口.硬件接口:是指两个硬件设备之间的连接方式,既包括物理上的接口,还包括逻辑上的数据传送协议. 软件接口 ...
最新文章
- 学生教育云平台登录入口_湖南省教育云平台登录入口
- ROS系统 创建工作空间与功能包
- P2647 最大收益
- kotlin学习之对象(九)
- 记录一次iOS11大标题不滚动的问题
- 树分解 宽度 如何分解 算法
- 备课好帮手,免费分享 下载
- 【javascript】字符串逆序输出
- 测试睡眠质量软件,2018测睡眠质量的app排行榜:推荐10款有趣又有效的睡眠APP
- 近世代数--陪集--|左陪集|=|右陪集|
- unity设置手机横屏方法和相关问题
- 简单实现SYN端口扫描
- 计算机网络基础知识总结【转自微信公众号杰哥的IT之旅】
- P6225 [eJOI2019] 异或橙子
- 关于学的计算机句子,赞美计算机唯美句子41条
- JNI和NKD入门系列二,mac环境下配置NDk,并在android studio上进行JNI开发
- 【转】七大查找算法总结
- Java 求100以内的质数
- [hadoop3.x]HDFS存储类型和存储策略(五)概述
- 减轻剪辑工作必备——Python实现让视频自动打码,再也不怕出现少儿不宜的画面了
热门文章
- python mysql数据库的高级应用_Python之路第十二天,高级(5)-Python操作Mysql,SqlAlchemy...
- html页面改成thymeleaf,【Thymeleaf】Thymeleaf模板对html实时刷新
- Android Studio配置Gradle(包括signingConfigs、buildTypes和productFlavors等)
- anconda设置镜像源_管理2000+Docker镜像,Kolla是如何做到的
- 基于JAVA+Servlet+JSP+MYSQL的高校社团管理系统
- 基于JAVA+SpringMVC+Mybatis+MYSQL的新闻头条管理系统
- 内存映射处理大文件[转载]
- 获取指定年月的全部日期放入数组
- Java并发编程基础-ReentrantLock的机制
- 浅谈Tarjan缩点(分析+模板)