Flutter蓝牙策略管理插件mtrust_urp_ble_strategy的使用

Flutter蓝牙策略管理插件mtrust_urp_ble_strategy的使用

在使用Flutter蓝牙策略管理插件mtrust_urp_ble_strategy时,我们需要确保在应用中正确配置权限。以下是详细的步骤和代码示例。

权限配置

Android

首先,在你的AndroidManifest.xml文件中添加所需的权限:

<!-- 告诉Google Play Store你的应用使用了蓝牙LE
如果蓝牙是必要的,请将android:required设置为true -->
<uses-feature android:name="android.hardware.bluetooth_le" android:required="false" />

<!-- Android 12 新增的蓝牙权限
https://developer.android.com/about/versions/12/features/bluetooth-permissions -->
<uses-permission android:name="android.permission.BLUETOOTH_SCAN" android:usesPermissionFlags="neverForLocation" />
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />

<!-- 适用于Android 11或更低版本的权限 -->
<uses-permission android:name="android.permission.BLUETOOTH" android:maxSdkVersion="30" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" android:maxSdkVersion="30" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" android:maxSdkVersion="30" />

<!-- 适用于Android 9或更低版本的权限 -->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" android:maxSdkVersion="28" />

为了防止在发布构建中出现错误,请在你的project/android/app/proguard-rules.pro文件中添加以下行:

-keep class com.lib.mtrust_urp_ble_strategy.* { *; }

iOS

在你的ios/Runner/Info.plist文件中添加所需的权限描述:

<key>NSBluetoothAlwaysUsageDescription</key>
<string>此应用始终需要蓝牙才能运行</string>
<key>NSBluetoothPeripheralUsageDescription</key>
<string>此应用需要蓝牙外围设备才能运行</string>
<key>NSLocationAlwaysAndWhenInUseUsageDescription</key>
<string>此应用始终需要位置信息并在使用中都需要位置信息才能运行</string>
<key>NSLocationAlwaysUsageDescription</key>
<string>此应用始终需要位置信息才能运行</string>
<key>NSLocationWhenInUseUsageDescription</key>
<string>此应用在使用中需要位置信息才能运行</string>

完整示例代码

以下是一个完整的示例代码,展示了如何使用mtrust_urp_ble_strategy插件进行蓝牙策略管理。

Android 配置

在你的AndroidManifest.xml文件中添加蓝牙权限:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.myapp">

    <application
        android:label="myapp"
        android:icon="@mipmap/ic_launcher">
        <activity
            android:name=".MainActivity"
            android:launchMode="singleTop"
            android:theme="@style/LaunchTheme"
            android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
            android:hardwareAccelerated="true"
            android:windowSoftInputMode="adjustResize">
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>
                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>
        </activity>
        <!-- 告诉Google Play Store你的应用使用了蓝牙LE -->
        <uses-feature android:name="android.hardware.bluetooth_le" android:required="false" />
        <!-- 新增的蓝牙权限 -->
        <uses-permission android:name="android.permission.BLUETOOTH_SCAN" android:usesPermissionFlags="neverForLocation" />
        <uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
        <!-- 适用于Android 11或更低版本的权限 -->
        <uses-permission android:name="android.permission.BLUETOOTH" android:maxSdkVersion="30" />
        <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" android:maxSdkVersion="30" />
        <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" android:maxSdkVersion="30" />
        <!-- 适用于Android 9或更低版本的权限 -->
        <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" android:maxSdkVersion="28" />
    </application>
</manifest>

在你的project/android/app/proguard-rules.pro文件中添加以下行:

-keep class com.lib.mtrust_urp_ble_strategy.* { *; }

iOS 配置

在你的ios/Runner/Info.plist文件中添加蓝牙权限描述:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    ...
    <key>NSBluetoothAlwaysUsageDescription</key>
    <string>此应用始终需要蓝牙才能运行</string>
    <key>NSBluetoothPeripheralUsageDescription</key>
    <string>此应用需要蓝牙外围设备才能运行</string>
    <key>NSLocationAlwaysAndWhenInUseUsageDescription</key>
    <string>此应用始终需要位置信息并在使用中都需要位置信息才能运行</string>
    <key>NSLocationAlwaysUsageDescription</key>
    <string>此应用始终需要位置信息才能运行</string>
    <key>NSLocationWhenInUseUsageDescription</key>
    <string>此应用在使用中需要位置信息才能运行</string>
    ...
</dict>
</plist>

使用示例代码

在你的Flutter项目中,你可以通过以下代码来初始化和使用mtrust_urp_ble_strategy插件:

import 'package:flutter/material.dart';
import 'package:mtrust_urp_ble_strategy/mtrust_urp_ble_strategy.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatefulWidget {
  [@override](/user/override)
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  [@override](/user/override)
  void initState() {
    super.initState();
    initPlatformState();
  }

  Future<void> initPlatformState() async {
    // 初始化蓝牙策略管理插件
    await MtrustUrPBleStrategy.init();
    
    // 检查蓝牙是否可用
    bool isBleAvailable = await MtrustUrPBleStrategy.isBleAvailable();
    print('BLE Available: $isBleAvailable');
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('Bluetooth Strategy Example'),
        ),
        body: Center(
          child: Text('Check BLE availability on console.'),
        ),
      ),
    );
  }
}

更多关于Flutter蓝牙策略管理插件mtrust_urp_ble_strategy的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter蓝牙策略管理插件mtrust_urp_ble_strategy的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


mtrust_urp_ble_strategy 是一个用于管理蓝牙策略的Flutter插件,通常用于在特定场景下控制蓝牙的连接、断开、数据传输等行为。以下是如何使用该插件的基本步骤和示例代码。

1. 添加依赖

首先,在 pubspec.yaml 文件中添加 mtrust_urp_ble_strategy 插件的依赖:

dependencies:
  flutter:
    sdk: flutter
  mtrust_urp_ble_strategy: ^1.0.0  # 请根据实际情况替换为最新版本

然后运行 flutter pub get 来获取依赖。

2. 初始化插件

在使用插件之前,通常需要对其进行初始化。你可以在 main.dart 文件中进行初始化操作:

import 'package:flutter/material.dart';
import 'package:mtrust_urp_ble_strategy/mtrust_urp_ble_strategy.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await MtrustUrpBleStrategy.initialize();
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(),
    );
  }
}

3. 使用插件功能

mtrust_urp_ble_strategy 插件通常提供了一些方法来管理蓝牙策略。以下是一些常见的使用场景:

3.1 设置蓝牙策略

你可以通过调用 setBleStrategy() 方法来设置蓝牙策略:

import 'package:flutter/material.dart';
import 'package:mtrust_urp_ble_strategy/mtrust_urp_ble_strategy.dart';

class MyHomePage extends StatefulWidget {
  [@override](/user/override)
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  String _status = 'Not set';

  Future<void> _setBleStrategy() async {
    try {
      await MtrustUrpBleStrategy.setBleStrategy(
        strategy: BleStrategy.autoConnect,  // 根据需要设置策略
      );
      setState(() {
        _status = 'Strategy set successfully';
      });
    } catch (e) {
      setState(() {
        _status = 'Failed to set strategy: $e';
      });
    }
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('BLE Strategy Demo'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text('Status: $_status'),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: _setBleStrategy,
              child: Text('Set BLE Strategy'),
            ),
          ],
        ),
      ),
    );
  }
}

3.2 获取当前蓝牙策略

你可以通过调用 getBleStrategy() 方法来获取当前的蓝牙策略:

Future<void> _getBleStrategy() async {
  try {
    BleStrategy strategy = await MtrustUrpBleStrategy.getBleStrategy();
    setState(() {
      _status = 'Current strategy: $strategy';
    });
  } catch (e) {
    setState(() {
      _status = 'Failed to get strategy: $e';
    });
  }
}

3.3 监听蓝牙状态变化

你可以通过监听蓝牙状态的变化来执行相应的操作:

StreamSubscription<BleState> _bleStateSubscription;

[@override](/user/override)
void initState() {
  super.initState();
  _bleStateSubscription = MtrustUrpBleStrategy.onBleStateChanged.listen((state) {
    setState(() {
      _status = 'BLE state changed: $state';
    });
  });
}

[@override](/user/override)
void dispose() {
  _bleStateSubscription.cancel();
  super.dispose();
}
回到顶部