我是靠谱客的博主 寒冷唇膏,这篇文章主要介绍利用蓝牙广播数据,现在分享给大家,希望可以做个参考。

一个Activity搞定.

在自定义一个myAppliction继承系统的Appliction,我在onCreate()里进行自动开启蓝牙.

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
public class MyApplication extends Application { @Override public void onCreate() { super.onCreate(); BluetoothAdapter blueadapter = BluetoothAdapter.getDefaultAdapter(); if(blueadapter!=null) { //Device support Bluetooth //确认开启蓝牙 if (!blueadapter.isEnabled()) { //直接开启,不经过提示 blueadapter.enable(); } }

MainActivity 里面的代码.

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
public class MainActivityextends AppCompatActivity{ private BluetoothAdapter mBluetoothAdapter; private static final String TAG = "bleperipheral"; private static final String HEART_RATE_SERVICE = "0000180d-0000-1000-8000-00805f9b34fb"; private BluetoothLeAdvertiser mBluetoothLeAdvertiser; //回调 private AdvertiseCallback mAdvertiseCallback = new AdvertiseCallback() { @Override //成功 public void onStartSuccess(AdvertiseSettings settingsInEffect) { super.onStartSuccess(settingsInEffect); if (settingsInEffect != null) { Log.d(TAG, "onStartSuccess TxPowerLv=" + settingsInEffect.getTxPowerLevel() + " mode=" + settingsInEffect.getMode() + " timeout=" + settingsInEffect.getTimeout()); } else { Log.e(TAG, "onStartSuccess, settingInEffect is null"); } Log.e(TAG, "onStartSuccess settingsInEffect" + settingsInEffect); } //失败 @Override public void onStartFailure(int errorCode) { super.onStartFailure(errorCode); Log.e(TAG, "onStartFailure errorCode" + errorCode);//返回的错误码 if (errorCode == ADVERTISE_FAILED_DATA_TOO_LARGE) { Toast.makeText(Utils.getContext(), "广播开启错误,数据大于31个字节", Toast.LENGTH_LONG).show(); Log.e(TAG, "广播开启错误,数据大于31个字节"); } else if (errorCode == ADVERTISE_FAILED_TOO_MANY_ADVERTISERS) { Toast.makeText(Utils.getContext(), "未能开始广播,没有广播实例", Toast.LENGTH_LONG).show(); Log.e(TAG, "未能开始广播,没有广播实例"); } else if (errorCode == ADVERTISE_FAILED_ALREADY_STARTED) { Toast.makeText(Utils.getContext(), "正在连接的,无法再次连接", Toast.LENGTH_LONG).show(); Log.e(TAG, "正在连接的,无法再次连接"); } else if (errorCode == ADVERTISE_FAILED_INTERNAL_ERROR) { Toast.makeText(Utils.getContext(), "由于内部错误操作失败", Toast.LENGTH_LONG).show(); Log.e(TAG, "由于内部错误操作失败"); } else if (errorCode == ADVERTISE_FAILED_FEATURE_UNSUPPORTED) { Toast.makeText(Utils.getContext(), "在这个平台上不支持此功能", Toast.LENGTH_LONG).show(); Log.e(TAG, "在这个平台上不支持此功能"); } } };@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); init(); } //初始化数据 private void init() { if (!getPackageManager().hasSystemFeature(PackageManager.FEATURE_BLUETOOTH_LE)) { Toast.makeText(this, "不支持", Toast.LENGTH_LONG).show(); finish(); } final BluetoothManager mBluetoothManager = (BluetoothManager) getSystemService(BLUETOOTH_SERVICE); mBluetoothAdapter = mBluetoothManager.getAdapter(); if (mBluetoothAdapter == null) { Toast.makeText(this, "未配对蓝牙", Toast.LENGTH_LONG).show(); finish(); } mBluetoothLeAdvertiser = mBluetoothAdapter.getBluetoothLeAdvertiser();//判断你的设备到底支持不支持BLE Peripheral。假如此返回值非空,你才可以继续有机会开发 if (mBluetoothLeAdvertiser == null) { Toast.makeText(this, "不支持BLE Peripheral", Toast.LENGTH_SHORT).show(); Log.e(TAG, "不支持BLE Peripheral"); finish(); } //开启蓝牙广播 一个是广播设置参数,一个是广播数据,还有一个是Callback mBluetoothLeAdvertiser.startAdvertising(createAdvSettings(true, 0), createAdvertiseData(), mAdvertiseCallback); Toast.makeText(Utils.getContext(), "开启广播", Toast.LENGTH_LONG).show(); Log.e(TAG, "开启广播"); } /** * 初始化蓝牙类 * AdvertisingSettings.Builder 用于创建AdvertiseSettings * AdvertiseSettings中包含三种数据:AdvertiseMode, Advertise TxPowerLevel和AdvertiseType,其测试结果如下: * AdvertiseMode: * Advertise Mode Logcat频率 检测到的频率 * ADVERTISE_MODE_LOW_LATENCY 1/1600 milliseconds 1/1068 milliseconds * ADVERTISE_MODE_BALANCED 1/400 milliseconds 1/295 milliseconds * ADVERTISE_MODE_LOW_POWER 1/160 milliseconds 1/142 milliseconds */ public static AdvertiseSettings createAdvSettings(boolean connectable, int timeoutMillis) { //设置广播的模式,应该是跟功耗相关 AdvertiseSettings.Builder mSettingsbuilder = new AdvertiseSettings.Builder(); mSettingsbuilder.setAdvertiseMode(AdvertiseSettings.ADVERTISE_MODE_BALANCED); mSettingsbuilder.setConnectable(connectable); mSettingsbuilder.setTimeout(timeoutMillis); mSettingsbuilder.setTxPowerLevel(AdvertiseSettings.ADVERTISE_TX_POWER_HIGH); AdvertiseSettings mAdvertiseSettings = mSettingsbuilder.build(); if (mAdvertiseSettings == null) { Toast.makeText(Utils.getContext(), "mAdvertiseSettings == null", Toast.LENGTH_LONG).show(); Log.e(TAG, "mAdvertiseSettings == null"); } return mAdvertiseSettings; } //设置一下FMP广播数据 public static AdvertiseData createAdvertiseData() { AdvertiseData.Builder mDataBuilder = new AdvertiseData.Builder(); // mDataBuilder.addServiceUuid(ParcelUuid.fromString(HEART_RATE_SERVICE)); //添加的数据 mDataBuilder.addServiceData(ParcelUuid.fromString(HEART_RATE_SERVICE), "eeeeeeeeee".getBytes()); AdvertiseData mAdvertiseData = mDataBuilder.build(); if (mAdvertiseData == null) { Toast.makeText(Utils.getContext(), "mAdvertiseSettings == null", Toast.LENGTH_LONG).show(); Log.e(TAG, "mAdvertiseSettings == null"); } return mAdvertiseData; } //注销 @Override protected void onDestroy() { super.onDestroy(); Toast.makeText(Utils.getContext(), "停止广播", Toast.LENGTH_LONG).show(); Log.e(TAG, "停止广播"); //停止蓝牙广播 stopAdvertise(); } private void stopAdvertise() { if (mBluetoothLeAdvertiser != null) { mBluetoothLeAdvertiser.stopAdvertising(mAdvertiseCallback); mBluetoothLeAdvertiser = null; Log.e(TAG, "停止广播"); }} //添加权限 <uses-permission android:name="android.permission.BLUETOOTH" /> <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" /> //收工

demo下载地址      https://download.csdn.net/download/qq_36665856/10396723

最后

以上就是寒冷唇膏最近收集整理的关于利用蓝牙广播数据的全部内容,更多相关利用蓝牙广播数据内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(47)

评论列表共有 0 条评论

立即
投稿
返回
顶部