Android Bluetooth蓝牙客户端发起对服务端连接建立请求过程(高版本Android兼容)详解手机开发
2023-06-13 09:20:06 时间
Android Bluetooth蓝牙客户端发起对服务端连接建立请求过程(高版本Android兼容)
本例代码是蓝牙客户端代码,只完成连接建立请求,假定蓝牙服务端设备名是:Android-Phone。兼容高版本Android系统。低版本则无需运行时权限申请。
package zhangphil.client; import java.util.UUID; import android.Manifest; import android.app.Activity; import android.bluetooth.BluetoothAdapter; import android.bluetooth.BluetoothDevice; import android.bluetooth.BluetoothSocket; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.content.pm.PackageManager; import android.os.Build; import android.os.Bundle; import android.text.TextUtils; import android.util.Log; public class MainActivity extends Activity { private BluetoothAdapter mBluetoothAdapter; private final int PERMISSION_REQUEST_COARSE_LOCATION = 0xb01; private String TAG = zhangphil private String MY_UUID = 00001101-0000-1000-8000-00805F9B34FB // 广播接收发现蓝牙设备 private BroadcastReceiver mReceiver = new BroadcastReceiver() { @Override 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 != null) { String name = device.getName(); Log.d(TAG, 发现设备: + name); if (TextUtils.equals(name, Android-Phone )) { Log.d(TAG, 发现目标设备,开始线程连接! // 蓝牙搜索是非常消耗系统资源开销的过程. // 一旦发现了目标感兴趣的设备,可以考虑关闭扫描。 mBluetoothAdapter.cancelDiscovery(); new ClientThread(device).start(); } } } } }; private class ClientThread extends Thread { private BluetoothDevice device; public ClientThread(BluetoothDevice device) { this.device = device; } @Override public void run() { BluetoothSocket socket; try { socket = device.createRfcommSocketToServiceRecord(UUID.fromString(MY_UUID)); Log.d(TAG, 连接服务端... socket.connect(); Log.d(TAG, 连接建立. } catch (Exception e) { e.printStackTrace(); } } } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (Build.VERSION.SDK_INT = Build.VERSION_CODES.M) { if (this.checkSelfPermission(Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { requestPermissions(new String[]{Manifest.permission.ACCESS_COARSE_LOCATION}, PERMISSION_REQUEST_COARSE_LOCATION); } } mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); // 注册广播接收器。接收蓝牙发现讯息 IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_FOUND); registerReceiver(mReceiver, filter); if (mBluetoothAdapter.startDiscovery()) { Log.d(TAG, 启动蓝牙扫描设备... } } @Override protected void onDestroy() { super.onDestroy(); unregisterReceiver(mReceiver); } @Override public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) { switch (requestCode) { case PERMISSION_REQUEST_COARSE_LOCATION: if (grantResults[0] == PackageManager.PERMISSION_GRANTED) { } break; } } }
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/3126.html
服务器部署程序员系统优化网站设置运维相关文章
- Android中常用的加密方式[通俗易懂]
- 代码加密 android,Android 开发怎样做代码加密或混淆「建议收藏」
- android 的hook技术,Android Native Hook技术(一)
- Android怎么查看手机中的本地数据库
- robotium android,Robotium 测试Android apk安装包
- Android触摸事件_android设置按钮点击事件
- android activitymanager 系统api_Android view
- android进程间通信的方式_Android进程注入
- android线程间通信的几种方法_Android进程间和线程间通信方式
- Mac下安装NDK(android开发)
- 【Android应用开发】 推送原理解析 极光推送使用详解 (零基础精通推送)
- 【Android Gradle 插件】自定义 Gradle 任务 ⑫ ( Gradle 任务的输出和输出 | @Optional 注解 | UP-TO-DATE 避免重复执行任务 )
- Windows PC、Linux、Android、iOS 跨平台视频云客户端 QML 开发解决方案
- Android Studio 环境配置优化详解手机开发
- Android中android:visibility的3中属性的剖析详解手机开发
- Android binder连接中,服务端如何知道客户端断开情况详解手机开发
- 实现Android客户端连接MySQL数据库的方法(安卓连接mysql数据库)
- android支持的语言列表(汇总)
- Android点击Button实现功能的几种方法总结
- android动态控制状态栏显示和隐藏的方法实例