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
- Android蓝牙事件
- android 获取蓝牙连接断开连接事件
- android 事件监听,蓝牙开启与关闭,java_Date日期
- Android如何监听蓝牙耳机的按键事件
- Android如何监听蓝牙耳机的按键事件
- Android如何监听蓝牙耳机的按键事件
- 【记录】Android监听蓝牙耳机的按键事件
- Android如何监听蓝牙耳机的按键事件
- android 蓝牙
- Android 蓝牙
- android 蓝牙
- Android蓝牙
- Android 蓝牙
- Android 蓝牙
- Android蓝牙
- Android蓝牙
- Android 蓝牙
- Android蓝牙
- tab栏切换(点击图片切换路径)
- 何为术
- [leetcode]: 371. Sum of Two Integers
- 汇编-循环编程
- 使用DOM4J方式生成XML文件的步骤如下:
- Android蓝牙事件
- 排序别名使用中文出错
- Hessian学习
- 生死门
- 5,jedis连接池
- Ios支付宝开发流程与常见的问题
- 融资规划
- show processList 命令内容
- servlet中将接收的参数转成Json