蓝牙休闲娱乐平台(毕业设计)第三部份

 

/**
 * Copyright@scholar_ii 
 * 
@author 梧州学院 04计本2班 罗功武
 * date 08/02/27
 
*/

package  flat;

import  javax.microedition.lcdui.Alert;
import  javax.microedition.lcdui.AlertType;
/**
 * HelpWindow 类
 * 简单的介绍平台的功能与游戏帮助
 
*/

public   class  HelpWindow  extends  Alert  {
    
    
public HelpWindow( ){
        
super("平台介绍与帮助 "null,null,AlertType.INFO);
        setString(
"平台的娱乐功能 " +
                
"进行聊天与游戏 " + 
                
"游戏规则介绍 " + 
                
"五子棋的变种 " + 
                
"玩家只能在棋盘的下方左右移动,且所下的棋于向上填充空的棋格为原则" +
                
"当玩家所填的棋在四个方向为四个的时候方为输 " +
                
"本娱乐平台有很多不足之处,请见谅 " + 
                
"编者:罗功武  " +
                
"联系方式:scholar_ii@163.com");
        setTimeout(Alert.FOREVER);
        
    }

}

 

 一下步我将在介绍的是common包中的类,里边的两个类对于整个系统来说是非常重要的。
同时它俩所涉及到JSR82API的应用。所以这个包的这两个类功能实现是一个技术点。先介绍ServiceSearcher类,这个类我是这样设计的。ServiceSearcher类实现两个接口,第一个接口是Runnable,这样做的目的是使其成为一个线程类,其它类调用它的时候就是会再后台产生一个任务线程。第二个接口就是DiscoveryListener,这个目的当然是为要利用JSR82中的API,有关与蓝牙收搜设备与服务的模式与方法并是不很难理解的,具体的实现大家可以看代码的,我想提的是代码里边我利用到了线程同步的机制,还有就是如何获取用户服务记录属性的值方法,(如何设置用户服务记录属性的值,大家可能****Server这些类中看到)
代码如下

 

 

/**
 * Copyright@scholar_ii 
 * 
@author 梧州学院 04计本2班 罗功武
 * date 08/02/27
 
*/

package  common;

import  java.util.Vector;
import  javax.bluetooth.BluetoothStateException;
import  javax.bluetooth.DeviceClass;
import  javax.bluetooth.DiscoveryAgent;
import  javax.bluetooth.DiscoveryListener;
import  javax.bluetooth.LocalDevice;
import  javax.bluetooth.RemoteDevice;
import  javax.bluetooth.ServiceRecord;
import  javax.bluetooth.UUID;
/**
 * ServiceSearcher类
 * 用于搜索三种服务
 * UUID-11111111111111111111111111111111
 * 两个聊天室
 * UUID-22222222222222222222222222222222
 * 多个聊天室
 * UUID-33333333333333333333333333333333
 * 双人互动游戏
 
*/

public   class  ServiceSearcher  implements  Runnable, DiscoveryListener  {
    
/*服务类型名*/
    
private String serviceName = null;
    
/*聊天室列表类*/
    
private RoomList chatRoomList = null;
    
/*本地设备*/
    
private LocalDevice localDevice = null;
    
/*服务代理*/
    
private DiscoveryAgent agent = null;
    
/*发现的设备*/
    
private Vector deviceFound = null;
    
/*发现的服务*/
    
private Vector serviceFound  = null;
    
    
public ServiceSearcher(String serviceName,RoomList roomList)
    
{
        
this.serviceName = serviceName;
        
this.chatRoomList = roomList;
        
/*开始搜索线程*/
        
new Thread(this).start();
    }

    
/**
     * 开始搜索
     
*/

    
public void run() {
        
        doSearchDevices();

    }

    
/**
     * 服务记录搜索的方法
     
*/

    
public void doSearchDevices(){
        
        
try {
            localDevice 
= LocalDevice.getLocalDevice();
        }
 catch (BluetoothStateException e) {
            
            e.printStackTrace();
        }

        agent 
= localDevice.getDiscoveryAgent();
        deviceFound 
= new Vector();
        serviceFound 
= new Vector();
        
try {
            
if(!agent.startInquiry(DiscoveryAgent.GIAC, this))
            
{
                
return;
            }

        }
 catch (BluetoothStateException e) {
            
            
        }

    }

    
/**
     * 服务搜索的方法
     * 
@param remoteDevice
     * 
@return void 
     
*/

    
public void doServiceSearch(RemoteDevice remoteDevice){
    
        
/*服务记录属性值的ID,用户自定义的属性值*/
        
int attributes[] = {0x1234,0x1235};
        
/*服务记录的UUID*/
        UUID uuids[] 
= new UUID[2];
        uuids[
0= new UUID(serviceName, false);
        uuids[
1= new UUID(0x1101);
    
        
try {
            agent.searchServices(attributes, uuids, remoteDevice, 
this);
        }
catch (BluetoothStateException e) {
        
/*服务搜索失败的处理*/
        
return;
    }

}
   /**
     * 服务器设备发现的处理
     * 
@param remoteDevice, deviceClasss
     * 
@return void 
     
*/

    
public void deviceDiscovered(RemoteDevice remoteDevice, DeviceClass deviceClass) {
        
/*加入搜索到的服务器设备*/
        deviceFound.addElement(remoteDevice);

    }

    
/**
     * 服务器设备搜索到服务设备的处理
     * 
@param disType
     * 
@return void
     
*/

    
public void inquiryCompleted(int disType) {
        
        
switch(disType)
        
{   
            
/*成功完成搜索的处理*/
            
case DiscoveryListener.INQUIRY_COMPLETED:
                
for(int i= 0; i<deviceFound.size(); i++){
                    doServiceSearch((RemoteDevice)deviceFound.elementAt(i));
                    
/*实现一次搜一个服务器设备的服务记录的同步*/
                    
synchronized(this){
                        
try {
                            
this.wait();
                        }
 catch (InterruptedException e) {
                            e.printStackTrace();
                        }

                    }

                addRoomMessage();    
                }
    
                
break;
            
case DiscoveryListener.INQUIRY_TERMINATED:
                
break;
            
case DiscoveryListener.INQUIRY_ERROR:
                
break;
        }


    }

    
/*不利用服务搜索完成方法*/
    
public void serviceSearchCompleted(int transID, int respCode) {
        

    }

    
/**
     * 搜索到服务的处理
     * 
@param tarnsID, serviceRecord
     * 
@return void 
     
*/

    
public void servicesDiscovered(int transID, ServiceRecord[] serviceRecord) {
        
/*加入搜索到的服务记录*/
        serviceFound.addElement(serviceRecord[
0]);
        
/*实现一次搜一个服务器设备的服务记录的同步*/
        
synchronized(this){
            
this.notifyAll();
        }

        
    }

    
/**
     * 增加搜到的聊天室列表
     * 
@param 无
     * 
@return 无
     
*/

    
private void addRoomMessage()
    
{
        
        ServiceRecord tempRecord
= null;
        chatRoomList.roomURLList 
= new String[serviceFound.size()];
        chatRoomList.roomNameList 
= new String[serviceFound.size()];
        
/*删除原先的String*/
        chatRoomList.deleteAll();
        
for(int i=0; i<serviceFound.size(); i++)
        
{
            
/*获得服务器端的服务记录*/
            tempRecord 
= (ServiceRecord)serviceFound.elementAt(i);
            
/*获得服务器端的服务记录的链接字符串并加入到聊天室的链接列表*/
            chatRoomList.roomURLList[i]
= tempRecord.getConnectionURL(
                    ServiceRecord.NOAUTHENTICATE_NOENCRYPT, 
false);
            
/*获得服务记录的用户自定义的服务属性并加入到聊天室名的列表*/
            String str 
=(String)(tempRecord.getAttributeValue(0x1234).getValue()); 
            chatRoomList.append(str, 
null);
            chatRoomList.roomNameList[i] 
= str; 
        }

            
    }


}
// ServiceSercher.java结束

 

 

 

/**
 * Copyright@scholar_ii 
 * 
@author 梧州学院 04计本2班 罗功武
 * date 08/02/27
 
*/

package  common;

import  javax.microedition.lcdui.Command;
import  javax.microedition.lcdui.CommandListener;
import  javax.microedition.lcdui.Displayable;
import  javax.microedition.lcdui.List;

import  chat.MultiChatRoomClient;
import  chat.PairChatRoomClient;
import  flat.FlatMainMIDlet;
import  game.GameClient;
/**
 * RoomList 类
 * 显示蓝牙网络中开放的如娱乐房间的列表。
 * 提供给用户选择进入感趣兴的娱乐房间。
 
*/

public   class  RoomList  extends  List  implements  CommandListener  {
    
    
/*聊天室类型*/
    
private int roomStyle ;
    
/*用户名*/
    
private String userName = null;
    
/*娱乐平始的主类*/
    
private FlatMainMIDlet flatMainMIDlet = null;
    
/*聊天室链接列表*/
    
public String[] roomURLList = null;
    
/*聊天室名称列表,创建聊天室的用户妮称*/
    
public String[] roomNameList = null;
    
    
private static final Command cmdBack = new Command("返出",Command.BACK,1);
    
private static final Command cmdOK = new Command("进入", Command.OK,1);
    
/**
     * 构造方法
     * 完成聊天室窗口的初使化
     * 
@param title
     * 
@param flatMainMIDlet
     * 
@param userName
     
*/

    
public RoomList(String title, FlatMainMIDlet flatMainMIDlet,
            String userName ,String uuidString, 
int roomStyle){
        
super(title, List.EXCLUSIVE);
        
this.flatMainMIDlet = flatMainMIDlet;
        
this.userName = userName;
        
this.roomStyle = roomStyle;
        append(
"搜索房间中.....",null);
        addCommand(cmdBack);
        addCommand(cmdOK);
        setCommandListener(
this);
        
new ServiceSearcher(uuidString,this);
    }

    
    
private void showRoomClinet(int index)
    
{
        
switch(roomStyle)
        
{
            
case 1:
                
/*双人个聊天室*/
                flatMainMIDlet.display.setCurrent(
                        
new PairChatRoomClient(roomURLList[index],
                                flatMainMIDlet,userName,roomNameList[index]));
                
break;
            
case 2:
                
/*多人聊天室*/
                flatMainMIDlet.display.setCurrent(
                        
new MultiChatRoomClient(roomURLList[index],
                                flatMainMIDlet,userName,roomNameList[index]));
                
break;
            
case 3:
                
/*游戏聊天室*/
                flatMainMIDlet.display.setCurrent(
                        
new GameClient(roomURLList[index],
                                flatMainMIDlet));
                
break;
            
        }

    }

    
    
public void commandAction(Command command, Displayable displayable) {
         
/*进入聊天室*/
        
if(command==cmdOK)
        
{
            
if(roomURLList!=null)
            
{
                
/*选择的聊天室的序号*/
                
int index = getSelectedIndex();
                showRoomClinet( index);
                    
            }

        }

        
/*返回主菜单*/
        
else if(command==cmdBack)
        
{
            flatMainMIDlet.showFlatMenu();
        }


    }

    
}
// ChatRoomList.java文件结束

 

RoomList类是ServiceSearcher类的使用者。RoomList类主要是利用ServceSearcher类来收某种服务,并将结果显示出来。简单来说就是你叫你小弟去买东西,然后你就忙你的事去,当你小弟买回你所需要的东西时就交给你。RoomList类与ServiceSerarcher类的关系可以这样形象的理解吧。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
51单片机是一种非常常用的微控制器,被广泛应用于各种电子设备中。蓝牙技术是一种无线通信技术,可以实现设备之间的数据传输和通信。电子秤是一种根据物体重量进行测量的设备,可以应用于各种场合,例如超市、医院等。LCD1602是一种常见的液晶显示器,可以用来显示各种信息。 基于以上硬件的基础上,毕业设计可以考虑将51单片机、蓝牙模块、电子秤和LCD1602组合在一起,实现一个蓝牙电子秤系统。 首先,通过51单片机和LCD1602,可以实现将电子秤测量的重量信息显示在LCD1602上,方便用户观察。同时,通过三个按键,用户可以进行操作,例如切换不同的显示模式、调节显示亮度等。 其次,通过蓝牙模块,可以实现将电子秤测量的重量数据通过蓝牙传输给其他设备,例如手机、电脑等。这样,用户可以通过手机等设备接收和查看电子秤的重量信息,实现无线传输和远程监控。 毕业设计的关键是编写合适的程序代码,实现数据的采集、处理、显示和传输等功能。同时还需要进行硬件的连接和布局,确保各个模块之间的正常通信和工作。 总的来说,51单片机蓝牙电子秤LCD1602三按键蓝牙毕业设计,是一个结合了51单片机、蓝牙技术、电子秤和LCD1602的系统,能够实现电子秤重量的显示、远程传输和控制等功能。通过该设计,可以提高电子秤的使用便利性和智能化水平。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值