Flutter USSD码高级操作插件ussd_advanced的使用

发布于 1周前 作者 itying888 来自 Flutter

Flutter USSD码高级操作插件 ussd_advanced 的使用

ussd_advanced 插件允许你在 Flutter 应用中直接运行 USSD 代码。以下是如何在项目中使用该插件的详细说明。

使用方法

添加依赖

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

dependencies:
  ussd_advanced: ^latest_version

记得将 ^latest_version 替换为最新版本号。

Android 配置

你需要在 Android Manifest 中添加 CALL_PHONEREAD_PHONE_STATE 权限:

<uses-permission android:name="android.permission.CALL_PHONE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />

多会话 USSD 支持

对于多会话 USSD,需要在 Android Manifest 的 <application> 标签内添加一个服务:

<service
    android:name="com.phan_tech.ussd_advanced.USSDServiceKT"
    android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE"
    android:exported="false">
    <intent-filter>
        <action android:name="android.accessibilityservice.AccessibilityService" />
    </intent-filter>
    <meta-data
        android:name="android.accessibilityservice"
        android:resource="@xml/ussd_service" />
</service>

iOS 配置

在 iOS 的 info.plist 文件中添加以下内容:

<key>LSApplicationQueriesSchemes</key>
<array>
  <string>tel</string>
</array>

示例代码

以下是完整的示例 Demo:

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

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

class MyApp extends StatefulWidget {
  const MyApp({Key? key}) : super(key: key);

  @override
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  late TextEditingController _controller;
  String? _response;

  @override
  void initState() {
    super.initState();
    _controller = TextEditingController();
  }

  @override
  void dispose() {
    _controller.dispose();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('Ussd Plugin example'),
        ),
        body: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          mainAxisSize: MainAxisSize.max,
          children: [
            // 文本输入框
            TextField(
              controller: _controller,
              keyboardType: TextInputType.phone,
              decoration: const InputDecoration(labelText: 'Ussd code'),
            ),

            // 显示响应(如果有)
            if (_response != null)
              Padding(
                padding: const EdgeInsets.symmetric(vertical: 8),
                child: Text(_response!),
              ),

            // 按钮组
            Row(
              mainAxisSize: MainAxisSize.max,
              mainAxisAlignment: MainAxisAlignment.spaceEvenly,
              children: [
                ElevatedButton(
                  onPressed: () {
                    UssdAdvanced.sendUssd(code: _controller.text, subscriptionId: 1);
                  },
                  child: const Text('普通请求\n(normal request)'),
                ),
                ElevatedButton(
                  onPressed: () async {
                    String? _res = await UssdAdvanced.sendAdvancedUssd(code: _controller.text, subscriptionId: 1);
                    setState(() {
                      _response = _res;
                    });
                  },
                  child: const Text('单会话请求\n(single session request)'),
                ),
                ElevatedButton(
                  onPressed: () async {
                    String? _res = await UssdAdvanced.multisessionUssd(code: _controller.text, subscriptionId: 1);
                    setState(() {
                      _response = _res;
                    });
                    String? _res2 = await UssdAdvanced.sendMessage('0');
                    setState(() {
                      _response = _res2;
                    });
                    await UssdAdvanced.cancelSession();
                  },
                  child: const Text('多会话请求\n(multi session request)'),
                ),
              ],
            )
          ],
        ),
      ),
    );
  }
}

方法说明

  • sendUssd: 执行普通的 USSD 请求,不返回响应。
  • sendAdvancedUssd: 执行单会话 USSD 请求,并返回响应字符串。仅支持 Android 8+(SDK 26+),如果 SDK 版本较低,则默认使用 sendUssd
  • multisessionUssd: 执行多会话 USSD 请求,返回所有会话的响应字符串。可以使用 sendMessage 方法与 USSD 对话框交互,并通过 cancelSession 取消会话。

选择 SIM 卡

可以通过提供 subscriptionId 参数来选择使用的 SIM 卡:

  • -1: 使用手机默认设置。
  • 仅支持 Android 6+,如果 SDK 版本较低,默认使用默认 SIM 卡。

希望这些信息能帮助你更好地理解和使用 ussd_advanced 插件!如果你有任何问题或需要进一步的帮助,请随时提问。


更多关于Flutter USSD码高级操作插件ussd_advanced的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter USSD码高级操作插件ussd_advanced的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是如何在Flutter项目中使用ussd_advanced插件来进行USSD码高级操作的代码示例。这个插件允许你在Flutter应用中发起和执行USSD请求。

首先,确保你的Flutter项目已经配置好,并且你已经添加了ussd_advanced插件到你的pubspec.yaml文件中:

dependencies:
  flutter:
    sdk: flutter
  ussd_advanced: ^最新版本号  # 请替换为实际的最新版本号

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

接下来,你可以在你的Dart文件中使用ussd_advanced插件。以下是一个完整的示例,展示如何发起一个USSD请求并处理响应:

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

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

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

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  String ussdResponse = '';

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('USSD Advanced Demo'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text(
              'USSD Response:',
              style: TextStyle(fontSize: 20),
            ),
            SizedBox(height: 20),
            Text(
              ussdResponse,
              style: TextStyle(fontSize: 18),
              textAlign: TextAlign.center,
            ),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: () async {
                // 发起USSD请求
                String code = "*123#"; // 替换为你要发送的USSD码
                UssdResponse response = await UssdAdvanced.sendUssdCode(code);
                
                // 处理响应
                if (response.resultCode == UssdResultCode.success) {
                  setState(() {
                    ussdResponse = response.message;
                  });
                } else if (response.resultCode == UssdResultCode.actionNeededByUser) {
                  // 如果需要用户输入更多信息,可以处理这里
                  print("Action needed by user: ${response.message}");
                } else {
                  // 处理其他错误情况
                  print("Error: ${response.errorMessage}");
                }
              },
              child: Text('Send USSD Code'),
            ),
          ],
        ),
      ),
    );
  }
}

在这个示例中,我们创建了一个简单的Flutter应用,其中包含一个按钮,当点击按钮时,会发送一个预定义的USSD码(在这个例子中是*123#),并在界面上显示响应消息。

请注意以下几点:

  1. UssdAdvanced.sendUssdCode(code)是一个异步函数,因此我们用await关键字等待其完成。
  2. UssdResponse对象包含了USSD请求的结果,包括resultCode(结果代码)和message(响应消息)。
  3. UssdResultCode是一个枚举,包含可能的USSD操作结果,例如successactionNeededByUser等。

你可以根据需要修改USSD码和处理逻辑,以适应你的特定需求。希望这个示例能帮助你更好地理解如何在Flutter项目中使用ussd_advanced插件。

回到顶部