首页
归档
留言
友链
广告合作
壁纸
更多
美女主播
Search
1
博瑞GE车机升级/降级
5,591 阅读
2
Mac打印机设置黑白打印
4,906 阅读
3
修改elementUI中el-table树形结构图标
4,875 阅读
4
Mac客户端添加腾讯企业邮箱方法
4,655 阅读
5
intelliJ Idea 2022.2.X破解
4,335 阅读
后端开发
HarmonyOS Next
Web前端
微信开发
开发辅助
App开发
数据库
随笔日记
登录
/
注册
Search
标签搜索
Spring Boot
Java
Vue
Spring Cloud
Mac
MyBatis
WordPress
MacOS
asp.net
Element UI
Nacos
.Net
Spring Cloud Alibaba
MySQL
Mybatis-Plus
Typecho
jQuery
Java Script
微信小程序
Oracle
Laughing
有钱终成眷属,没钱亲眼目睹
累计撰写
623
篇文章
累计收到
1,419
条评论
首页
栏目
后端开发
HarmonyOS Next
Web前端
微信开发
开发辅助
App开发
数据库
随笔日记
页面
归档
留言
友链
广告合作
壁纸
美女主播
搜索到
1
篇与
的结果
2020-12-28
android 连接蓝牙打印机 BluetoothAdapter
android 连接蓝牙打印机 BluetoothAdapter源码下载地址https://github.com/yylxy/BluetoothText.gitpublic class PrintActivity extends AppCompatActivity { //设备列表 private ListView listView; private ArrayList<PrintBean> mBluetoothDevicesDatas; private PrintAdapter adapter; //蓝牙适配器 private BluetoothAdapter mBluetoothAdapter; //请求的code public static final int REQUEST_ENABLE_BT = 1; private Switch mSwitch; private FloatingActionButton mFloatingActionButton; private ProgressBar mProgressBar; private Toolbar toolbar; private TextView searchHint; /** * 启动打印页面 * * @param printContent 要打印的内容 */ public static void starUi(Context context, String printContent) { Intent intent = new Intent(context, PrintActivity.class); intent.putExtra("id", id); intent.putExtra("printContent", printContent); context.startActivity(intent); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //广播注册 IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_FOUND); filter.addAction(BluetoothAdapter.ACTION_DISCOVERY_FINISHED); registerReceiver(mReceiver, filter); // Don't forget to unregister during onDestroy //初始化 mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); mSwitch = (Switch) findViewById(R.id.switch1); mFloatingActionButton = (FloatingActionButton) findViewById(R.id.floatingActionButton); mProgressBar = (ProgressBar) findViewById(R.id.progressBar3); toolbar = (Toolbar) findViewById(R.id.toolbar); searchHint = (TextView) findViewById(R.id.searchHint); toolbar.setTitle("选择打印设备"); listView = (ListView) findViewById(R.id.listView); mBluetoothDevicesDatas = new ArrayList<>(); String printContent=getIntent().getStringExtra("printContent"); adapter = new PrintAdapter(this, mBluetoothDevicesDatas, TextUtils.isEmpty(printContent)?"123456789完\n\n\n":printContent); listView.setAdapter(adapter); chechBluetooth(); addViewListener(); } /** * 判断有没有开启蓝牙 */ private void chechBluetooth() { //没有开启蓝牙 if (mBluetoothAdapter != null) { if (!mBluetoothAdapter.isEnabled()) { Intent intent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE); // 设置蓝牙可见性,最多300秒 intent.putExtra(BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION, 20); startActivityForResult(intent, REQUEST_ENABLE_BT); setViewStatus(true); //开启蓝牙 } else { searchDevices(); setViewStatus(true); mSwitch.setChecked(true); } } } /** * 搜索状态调整 * * @param isSearch 是否开始搜索 */ private void setViewStatus(boolean isSearch) { if (isSearch) { mFloatingActionButton.setVisibility(View.GONE); searchHint.setVisibility(View.VISIBLE); mProgressBar.setVisibility(View.VISIBLE); } else { mFloatingActionButton.setVisibility(View.VISIBLE); mProgressBar.setVisibility(View.GONE); searchHint.setVisibility(View.GONE); } } /** * 添加View的监听 */ private void addViewListener() { //蓝牙的状态 mSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { if (isChecked) { openBluetooth(); setViewStatus(true); } else { closeBluetooth(); } } }); //重新搜索 mFloatingActionButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (mSwitch.isChecked()) { searchDevices(); setViewStatus(true); } else { openBluetooth(); setViewStatus(true); } } }); toolbar.setNavigationIcon(R.drawable.ic_arrow_back_black_24dp); toolbar.setNavigationOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Toast.makeText(PrintActivity.this, "88", Toast.LENGTH_SHORT).show(); } }); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (resultCode == RESULT_OK && requestCode == REQUEST_ENABLE_BT) { Log.e("text", "开启蓝牙"); searchDevices(); mSwitch.setChecked(true); mBluetoothDevicesDatas.clear(); adapter.notifyDataSetChanged(); } else if (resultCode == RESULT_CANCELED && requestCode == REQUEST_ENABLE_BT) { Log.e("text", "没有开启蓝牙"); mSwitch.setChecked(false); setViewStatus(false); } } /** * 打开蓝牙 */ public void openBluetooth() { Intent intent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE); // 设置蓝牙可见性,最多300秒 intent.putExtra(BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION, 20); startActivityForResult(intent, REQUEST_ENABLE_BT); } /** * 关闭蓝牙 */ public void closeBluetooth() { mBluetoothAdapter.disable(); } /** * 搜索蓝牙设备 */ public void searchDevices() { mBluetoothDevicesDatas.clear(); adapter.notifyDataSetChanged(); //开始搜索蓝牙设备 mBluetoothAdapter.startDiscovery(); } /** * 通过广播搜索蓝牙设备 */ private final BroadcastReceiver mReceiver = new BroadcastReceiver() { public void onReceive(Context context, Intent intent) { String action = intent.getAction(); // 把搜索的设置添加到集合中 if (BluetoothDevice.ACTION_FOUND.equals(action)) { BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE); //已经匹配的设备 if (device.getBondState() == BluetoothDevice.BOND_BONDED) { addBluetoothDevice(device); //没有匹配的设备 } else { addBluetoothDevice(device); } adapter.notifyDataSetChanged(); //搜索完成 } else if (BluetoothAdapter.ACTION_DISCOVERY_FINISHED.equals(action)) { setViewStatus(false); } } /** * 添加数据 * @param device 蓝牙设置对象 */ private void addBluetoothDevice(BluetoothDevice device) { for (int i = 0; i < mBluetoothDevicesDatas.size(); i++) { if (device.getAddress().equals(mBluetoothDevicesDatas.get(i).getAddress())) { mBluetoothDevicesDatas.remove(i); } } if (device.getBondState() == BluetoothDevice.BOND_BONDED && device.getBluetoothClass().getDeviceClass() == PRINT_TYPE) { mBluetoothDevicesDatas.add(0, new PrintBean(device)); } else { mBluetoothDevicesDatas.add(new PrintBean(device)); } } }; }class PrintAdapter extends BaseAdapter { private ArrayList<PrintBean> mBluetoothDevicesDatas; private Context mContext; //蓝牙适配器 private BluetoothAdapter mBluetoothAdapter; //蓝牙socket对象 private BluetoothSocket mmSocket; private UUID uuid; //打印的输出流 private static OutputStream outputStream = null; //搜索弹窗提示 ProgressDialog progressDialog = null; private final int exceptionCod = 100; //打印的内容 private String mPrintContent; //在打印异常时更新ui Handler handler = new Handler() { @Override public void handleMessage(Message msg) { super.handleMessage(msg); if (msg.what == exceptionCod) { Toast.makeText(mContext, "打印发送失败,请稍后再试", Toast.LENGTH_SHORT).show(); if (progressDialog != null) { progressDialog.dismiss(); } } } }; /** * @param context 上下文 * @param mBluetoothDevicesDatas 设备列表 * @param printContent 打印的内容 */ public PrintAdapter(Context context, ArrayList<PrintBean> mBluetoothDevicesDatas, String printContent) { this.mBluetoothDevicesDatas = mBluetoothDevicesDatas; mContext = context; mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); mPrintContent = printContent; uuid = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB"); } public int getCount() { return mBluetoothDevicesDatas.size(); } @Override public Object getItem(int position) { return position; } @Override public long getItemId(int position) { return position; } @Override public View getView(final int position, View convertView, ViewGroup parent) { convertView = LayoutInflater.from(mContext).inflate(R.layout.itme, null); View icon = convertView.findViewById(R.id.icon); TextView name = (TextView) convertView.findViewById(R.id.name); TextView address = (TextView) convertView.findViewById(R.id.address); TextView start = (TextView) convertView.findViewById(R.id.start); final PrintBean dataBean = mBluetoothDevicesDatas.get(position); icon.setBackgroundResource(dataBean.getTypeIcon()); name.setText(dataBean.name); address.setText(dataBean.isConnect ? "已连接" : "未连接"); start.setText(dataBean.getDeviceType(start)); //点击连接与打印 convertView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { try { //如果已经连接并且是打印机 if (dataBean.isConnect && dataBean.getType() == PRINT_TYPE) { if (mBluetoothAdapter.isEnabled()) { new ConnectThread(mBluetoothAdapter.getRemoteDevice(dataBean.address)).start(); progressDialog = ProgressDialog.show(mContext, "提示", "正在打印...", true); } else { Toast.makeText(mContext, "蓝牙没有打开", Toast.LENGTH_SHORT).show(); } //没有连接 } else { //是打印机 if (dataBean.getType() == PRINT_TYPE) { setConnect(mBluetoothAdapter.getRemoteDevice(dataBean.address), position); //不是打印机 } else { Toast.makeText(mContext, "该设备不是打印机", Toast.LENGTH_SHORT).show(); } } } catch (Exception e) { e.printStackTrace(); } } }); return convertView; } /** * 匹配设备 * * @param device 设备 */ private void setConnect(BluetoothDevice device, int position) { try { Method createBondMethod = BluetoothDevice.class.getMethod("createBond"); createBondMethod.invoke(device); mBluetoothDevicesDatas.get(position).setConnect(true); notifyDataSetChanged(); } catch (Exception e) { e.printStackTrace(); } } /** * 发送数据 */ public void send(String sendData) { try { byte[] data = sendData.getBytes("gbk"); outputStream.write(data, 0, data.length); outputStream.flush(); outputStream.close(); progressDialog.dismiss(); } catch (IOException e) { e.printStackTrace(); handler.sendEmptyMessage(exceptionCod); // 向Handler发送消息,更新UI } } /** * 连接为客户端 */ private class ConnectThread extends Thread { public ConnectThread(BluetoothDevice device) { try { mmSocket = device.createRfcommSocketToServiceRecord(uuid); } catch (IOException e) { e.printStackTrace(); } } public void run() { //取消的发现,因为它将减缓连接 mBluetoothAdapter.cancelDiscovery(); try { //连接socket mmSocket.connect(); //连接成功获取输出流 outputStream = mmSocket.getOutputStream(); send(mPrintContent); } catch (Exception connectException) { Log.e("test", "连接失败"); connectException.printStackTrace(); //异常时发消息更新UI Message msg = new Message(); msg.what = exceptionCod; // 向Handler发送消息,更新UI handler.sendMessage(msg); try { mmSocket.close(); } catch (Exception closeException) { closeException.printStackTrace(); } return; } } } }
2020年12月28日
1,309 阅读
0 评论
23 点赞