闫刚 androidBluetoothChar代码架构

资源

androidBluetoothChar_CodeFramework.md
标题: 闫刚 androidBluetoothChar代码架构

简介

Android的官网查资料看到这个蓝牙聊天室的例子, 对于想使用bluetooth通信的android程序可以看下我的讲解,主要讲解蓝牙是如何发送和接收数据

界面布局layout

layout/activity_device_list.xml : 显示蓝牙设备列表
layout/activity_main.xml : 界面主入口
layout/device_name.xml : 蓝牙设备名列表
layout/fragment_bluetooth_chat.xml : 包括发送按钮, 内容输入接口的界面
layout/message.xml : 消息格式

menu/main.xml : 主界面中有"HIDE LOG/SHOW LOG"菜单界面
menu/blutooth_chat.xml : 蓝牙扫描,蓝牙设备选择,发送蓝牙菜单界面

code

BluetoothChatFragment.java  蓝牙聊天的页面层
BluetoothChatService.java   蓝牙聊天收发数据服务
Constants.java     
DeviceListActivity.java     显示蓝牙设备列表页面层
MainActivity.java           主界面

SampleActivityBase.java

Log.java
LogFragment.java  
LogNode.java  
LogView.java  
LogWrapper.java  
MessageOnlyLogFilter.java

界面交互逻辑

public class MainActivity extends SampleActivityBase
  ->protected void onCreate(Bundle savedInstanceState)
    ->BluetoothChatFragment fragment = new BluetoothChatFragment();
    -> transaction.replace(R.id.sample_content_fragment, fragment);                  //启动蓝牙聊天窗口 
       -> public void onCreate(Bundle savedInstanceState) 
          -> mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
          ->onCreateView() 
            ->onViewCreated()
                ->mConversationView = (ListView) view.findViewById(R.id.in);
                ->mOutEditText = (EditText) view.findViewById(R.id.edit_text_out);
                ->mSendButton = (Button) view.findViewById(R.id.button_send);
       -> public void onStart() {
           ->   setupChat();
             -> mConversationArrayAdapter = new ArrayAdapter<String>(getActivity(), R.layout.message);
            ->  mConversationView.setAdapter(mConversationArrayAdapter);
            -> mSendButton.setOnClickListener(new View.OnClickListener() {
                ->  public void onClick(View v) {
                     ->    sendMessage(message);
            -> mChatService = new BluetoothChatService(getActivity(), mHandler);     //创建服务         
            -> public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {   //创建菜单
        inflater.inflate(R.menu.bluetooth_chat, menu);

            -> public boolean onOptionsItemSelected(MenuItem item) {
                case R.id.secure_connect_scan: {
                    Intent serverIntent = new Intent(getActivity(), DeviceListActivity.class); //创建1个意图
                    startActivityForResult(serverIntent, REQUEST_CONNECT_DEVICE_SECURE);       //在启动activity的传递请求
                case R.id.insecure_connect_scan: {
                case R.id.discoverable: {    
    }

MainActivity的菜单选择

实现1个菜单接口,指定布局文件是menu文件夹的main.xml
public boolean onCreateOptionsMenu(Menu menu)
    getMenuInflater().inflate(R.menu.main, menu);

实现菜单切换的用户功能
public boolean onOptionsItemSelected(MenuItem item)    
  switch(item.getItemId()) {


## DeviceListActivity功能说明
```java
public class DeviceListActivity extends Activity
   -> protected void onCreate(Bundle savedInstanceState)
      -> setContentView(R.layout.activity_device_list);
      -> newDevicesListView.setOnItemClickListener(mDeviceClickListener);

private AdapterView.OnItemClickListener mDeviceClickListener
            = new AdapterView.OnItemClickListener() 
      ->setResult(Activity.RESULT_OK, intent);  //设置activity的返回值
      ->finish();                               //退出当前activity

蓝牙发送数据

定义输入输出流

private final InputStream mmInStream;
private final OutputStream mmOutStream;

tmpIn = socket.getInputStream();
tmpOut = socket.getOutputStream();

mSendButton.setOnClickListener(new View.OnClickListener() {
  public void onClick(View v) {
          -> sendMessage(message);
          -> mChatService.write(send);
            -> mmOutStream.write(buffer);

蓝牙接收数据

显示接收的数据
mConversationArrayAdapter.add(mConnectedDeviceName + ": " + readMessage);
显示发送的数据
mConversationArrayAdapter.add("Me: " + writeMessage);

  private class ConnectedThread extends Thread {
  public void run() {
  bytes = mmInStream.read(buffer);
       mHandler.obtainMessage(Constants.MESSAGE_READ, bytes, -1, buffer).sendToTarget();                     
        -> private final Handler mHandler = new Handler() {
        public void handleMessage(Message msg) {
            case Constants.MESSAGE_WRITE:
              mConversationArrayAdapter.add("Me:  " + writeMessage);
            case Constants.MESSAGE_READ:
              mConversationArrayAdapter.add(mConnectedDeviceName + ":  " + readMessage);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值