Android蓝牙事件

来源:互联网 发布:跟淘宝联盟类似的网站 编辑:程序博客网 时间:2024/05/22 04:35
package com.example.bluetoothdemo;import java.util.ArrayList;import android.app.Activity;import android.app.AlertDialog;import android.bluetooth.BluetoothAdapter;import android.bluetooth.BluetoothDevice;import android.content.DialogInterface;import android.content.DialogInterface.OnClickListener;import android.content.Intent;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.util.Log;import android.view.Menu;import android.view.MenuItem;import android.view.View;import android.widget.ArrayAdapter;import android.widget.EditText;import android.widget.ListView;import android.widget.Toast;public class MainActivity extends Activity {    private static final int REQUES_SELECT_BT_CODE = 0x1001;    // 使能请求码    private static final int REQUES_BT_ENABLE_CODE = 0x1002;    private static final String TAG = MainActivity.class.getName();    private ListView mListView;    private EditText mET;    private BluetoothAdapter mBluetoothAdapter;    private BluetoothDevice mRemoteDevice;    private ArrayAdapter<String> mAdapter;    // 聊天内容保存对象     private ArrayList<String> mChatContent;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        //使用主界面 布局        setContentView(R.layout.activity_main);        // UI初始化         mListView = (ListView) findViewById(R.id.listView1);        mET = (EditText) findViewById(R.id.editText1);        mChatContent = new ArrayList<String>();        // ListView的Adapter        mAdapter = new ArrayAdapter<String>(this,                 // 项显示布局                android.R.layout.simple_list_item_1,                 // 显示的数据源                mChatContent);        mListView.setAdapter(mAdapter);        // 打开蓝牙设备        openBtDevice();    }    /**     * 用户点击发送按钮     * @param v     */    public void onSendClick(View v){        String msg = mET.getText().toString().trim();        if(msg.length() <= 0){            Toast.makeText(this, "消息不能为空", Toast.LENGTH_SHORT).show();            return;        }        // 将用户输入的消息添加到ListView中去显示        mChatContent.add(mBluetoothAdapter.getName() + ":" + msg);        // 更新ListView显示        mAdapter.notifyDataSetChanged();        // 将发送消息任务提交给后台服务        TaskService.newTask(new Task(mHandler, Task.TASK_SEND_MSG, new Object[]{msg}));        // 清空输入框        mET.setText("");    }    private boolean openBtDevice(){        // 获得蓝牙匹配器        mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();         // 蓝牙设备不被支持        if (mBluetoothAdapter == null) {            Log.e(TAG, "Your device is not support Bluetooth!");            Toast.makeText(this, "该设备没有蓝牙设备", Toast.LENGTH_LONG).show();            return false;        }        // 使能蓝牙设备        if (!mBluetoothAdapter.isEnabled()) {            // 隐式Intent            Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);            startActivityForResult(enableBtIntent, REQUES_BT_ENABLE_CODE);         }else{            // 如果蓝牙设备已经使能,直接启动后台服务             startServiceAsServer();        }        return true;    }    private void startServiceAsServer() {        // Android异步通信机制Handler,UI线程不能执行耗时操作,应该交给子线程去做,        // 子线程不允许去更新UI控件,必须要用到Handler机制(AsyncTask)        TaskService.start(this, mHandler);        // 向后台服务提交一个任务,作为服务器端监听远程 设备连接        TaskService.newTask(new Task(mHandler, Task.TASK_START_ACCEPT, null));    }    private Handler mHandler = new Handler(){        @Override        public void handleMessage(Message msg) {            switch (msg.what) {            case Task.TASK_SEND_MSG:                Toast.makeText(MainActivity.this, msg.obj.toString(), Toast.LENGTH_SHORT).show();                break;            case Task.TASK_RECV_MSG:                // 获得远程设备发送的消息                mChatContent.add(msg.obj.toString());                mAdapter.notifyDataSetChanged();                break;            case Task.TASK_GET_REMOTE_STATE:                setTitle(msg.obj.toString());                break;            default:                break;            }        }    };    // 当startActivityForResult启动的 画面结束的时候,该方法被回调    @Override    protected void onActivityResult(int requestCode, int resultCode, Intent data) {        //        if(requestCode == REQUES_BT_ENABLE_CODE && resultCode == RESULT_OK){            // 作为蓝牙服务端启动后台服务            startServiceAsServer();        }else if(requestCode == REQUES_SELECT_BT_CODE && resultCode == RESULT_OK){            mRemoteDevice = data.getParcelableExtra("DEVICE");            if(mRemoteDevice == null)                return;            // 提交连接用户选择的设备对象,自己作为客户端            TaskService.newTask(new Task(mHandler, Task.TASK_START_CONN_THREAD, new Object[]{mRemoteDevice}));        }    }    @Override    public boolean onCreateOptionsMenu(Menu menu) {        getMenuInflater().inflate(R.menu.main, menu);        return true;    }    @Override    public boolean onOptionsItemSelected(MenuItem item) {        switch(item.getItemId()){        case R.id.change_name:            AlertDialog.Builder dlg = new AlertDialog.Builder(this);            final EditText devNameEdit = new EditText(this);            dlg.setView(devNameEdit);            dlg.setTitle("请输入用户名");            dlg.setPositiveButton("设置", new OnClickListener() {                public void onClick(DialogInterface dialog, int which) {                    if(devNameEdit.getText().toString().length() != 0)                        // 设置蓝牙设备名                        mBluetoothAdapter.setName(devNameEdit.getText().toString());                }            });            dlg.create();            dlg.show();            break;        case R.id.scann_device:            // 扫描周围蓝牙设备            startActivityForResult(new Intent(this, SelectDevice.class), REQUES_SELECT_BT_CODE);            break;        }        return true;    }    @Override    protected void onDestroy() {        // 停止服务        TaskService.stop(this);        super.onDestroy();    }}
0 0
原创粉丝点击