Flutter短信导出导入插件sms_export_import的使用

Flutter短信导出导入插件sms_export_import的使用

本插件用于在您的应用程序中导入和导出短信。

短信与彩信导出

短信与彩信导出 短信与彩信导出 短信与彩信导出 短信与彩信导出

短信与彩信导入

短信与彩信导入 短信与彩信导入 短信与彩信导入

此 Flutter 插件 sms_export_import 可以帮助您在应用程序中导出和导入短信和彩信。

特性 💚

  • 您可以在应用程序中导出和导入短信。
  • 您可以在应用程序中导出和导入彩信。

安装

首先,在 pubspec.yaml 文件中添加 sms_export_import 作为依赖项:

dependencies:
  sms_export_import: ^x.x.x

然后运行 flutter pub get 来安装依赖。

Android 配置

AndroidManifest.xml 文件中添加以下权限,并配置相应的接收器和活动,以便使您的应用成为默认的短信应用:

<uses-permission android:name="android.permission.READ_SMS" />
<uses-permission android:name="android.permission.WRITE_SMS"/>
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

<!-- 监听接收短信的BroadcastReceiver -->
<receiver
    android:name=".SmsReceiver"
    android:permission="android.permission.BROADCAST_SMS"
    android:exported="true">
    <intent-filter>
        <action android:name="android.provider.Telephony.SMS_DELIVER" />
    </intent-filter>
</receiver>

<!-- 监听接收彩信的BroadcastReceiver -->
<receiver
    android:name=".MmsReceiver"
    android:permission="android.permission.BROADCAST_WAP_PUSH"
    android:exported="true">
    <intent-filter>
        <action android:name="android.provider.Telephony.WAP_PUSH_DELIVER" />
        <data android:mimeType="application/vnd.wap.mms-message" />
    </intent-filter>
</receiver>

<!-- 允许用户发送新短信或彩信的Activity -->
<activity android:name=".ComposeSmsActivity"
    android:exported="true">
    <intent-filter>
        <action android:name="android.intent.action.SEND" />
        <action android:name="android.intent.action.SENDTO" />
        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="android.intent.category.BROWSABLE" />
        <data android:scheme="sms" />
        <data android:scheme="smsto" />
        <data android:scheme="mms" />
        <data android:scheme="mmsto" />
    </intent-filter>
</activity>

<!-- 提供从电话快速回复消息的服务 -->
<service
    android:name=".HeadlessSmsSendService"
    android:exported="true"
    android:permission="android.permission.SEND_RESPOND_VIA_MESSAGE">
    <intent-filter>
        <action android:name="android.intent.action.RESPOND_VIA_MESSAGE" />
        <category android:name="android.intent.category.DEFAULT" />
        <data android:scheme="sms" />
        <data android:scheme="smsto" />
        <data android:scheme="mms" />
        <data android:scheme="mmsto" />
    </intent-filter>
</service>

如何使用

短信与彩信导出

调用此方法在 onTap 事件中导出短信和彩信:

SmsExportImport.export(totalMessageStream: (data) {
  print('export sink ---&gt; $data');
  setState(() {
    totalSMS = data['totalSms'];
    totalMMS = data['totalMms'];
    exportSmsStatus = data['status'];
    clickOnImport = 'export';
  });
}).then((value) {
  print(
    'Flutter --&gt; MessageTotal ---&gt; export messageTotal --&gt; $value');
  setState(() {
    totalSMS = value!['totalSms'];
    totalMMS = value['totalMms'];
    exportSmsStatus = value['status'];
    clickOnImport = 'export';
  });
});

短信与彩信导入

调用此方法在 onTap 事件中导入短信和彩信:

SmsExportImport.import(totalMessageStream: (data) {
  print('import sink ---&gt; $data');
  setState(() {
    totalSMS = data['totalSms'];
    totalMMS = data['totalMms'];
    importSmsStatus = data['status'];
    clickOnImport = 'import';
  });
}).then((value) {
  print(
    'Flutter --&gt; MessageTotal ---&gt; import messageTotal --&gt; $value');
  setState(() {
    totalSMS = value!['totalSms'];
    totalMMS = value['totalMms'];
    importSmsStatus = value['status'];
    clickOnImport = 'import';
  });
});

示例代码

以下是一个完整的示例代码,展示了如何使用 sms_export_import 插件:

import 'package:device_info/device_info.dart';
import 'package:flutter/material.dart';
import 'package:permission_handler/permission_handler.dart';
import 'package:sms_export_import/sms_export_import.dart';

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

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

  [@override](/user/override)
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  int totalSMS = 0;
  int totalMMS = 0;
  var sdkInt;
  String clickOnImport = '';
  var exportSmsStatus = "None";
  var importSmsStatus = "None";

  [@override](/user/override)
  void initState() {
    super.initState();
    deviceInfo();
  }

  deviceInfo() async {
    var androidInfo = await DeviceInfoPlugin().androidInfo;
    sdkInt = androidInfo.version.sdkInt;
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      debugShowCheckedModeBanner: false,
      home: Scaffold(
        appBar: AppBar(
          title: const Text('短信导入与导出'),
        ),
        body: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            Row(
              mainAxisAlignment: MainAxisAlignment.spaceEvenly,
              children: <Widget>[
                InkWell(
                  onTap: () async {
                    print('导出短信');
                    Map<Permission, PermissionStatus> statuses =
                        await [Permission.sms, Permission.contacts].request();
                    if (statuses[Permission.sms]!.isGranted &&
                        statuses[Permission.contacts]!.isGranted) {
                      SmsExportImport.export(totalMessageStream: (data) {
                        print('导出sink ---&gt; $data');
                        setState(() {
                          totalSMS = data['totalSms'];
                          totalMMS = data['totalMms'];
                          exportSmsStatus = data['status'];
                          clickOnImport = 'export';
                        });
                      }).then((value) {
                        print(
                            'Flutter --&gt; MessageTotal ---&gt; 导出messageTotal --&gt; $value');
                        setState(() {
                          totalSMS = value!['totalSms'];
                          totalMMS = value['totalMms'];
                          exportSmsStatus = value['status'];
                          clickOnImport = 'export';
                        });
                      });
                    } else {
                      print('需要读取短信和联系人权限');
                    }
                  },
                  child: Container(
                      padding: const EdgeInsets.all(12.0),
                      decoration: BoxDecoration(
                        borderRadius: BorderRadius.circular(12.0),
                        color: Colors.blue,
                      ),
                      child: const Text(
                        '导出',
                        style: TextStyle(
                            color: Colors.white,
                            fontWeight: FontWeight.bold,
                            fontSize: 16),
                      )),
                ),
                InkWell(
                  onTap: () {
                    SmsExportImport.import(totalMessageStream: (data) {
                      print('导入sink ---&gt; $data');
                      setState(() {
                        totalSMS = data['totalSms'];
                        totalMMS = data['totalMms'];
                        importSmsStatus = data['status'];
                        clickOnImport = 'import';
                      });
                    }).then((value) {
                      print(
                          'Flutter --&gt; MessageTotal ---&gt; 导入messageTotal --&gt; $value');
                      setState(() {
                        totalSMS = value!['totalSms'];
                        totalMMS = value['totalMms'];
                        importSmsStatus = value['status'];
                        clickOnImport = 'import';
                      });
                    });
                    print('导入短信');
                  },
                  child: Container(
                      padding: const EdgeInsets.all(12.0),
                      decoration: BoxDecoration(
                        borderRadius: BorderRadius.circular(12.0),
                        color: Colors.blue,
                      ),
                      child: const Text(
                        '导入',
                        style: TextStyle(
                            color: Colors.white,
                            fontWeight: FontWeight.bold,
                            fontSize: 16),
                      )),
                ),
              ],
            ),
            const SizedBox(
              height: 30,
            ),
            clickOnImport == 'import'
                ? Align(
                    alignment: Alignment.center,
                    child: Container(
                      margin: const EdgeInsets.only(left: 12, right: 12),
                      child: Text(
                        importSmsStatus == "None" ? '' : importSmsStatus,
                        style: const TextStyle(
                            color: Colors.blue,
                            fontSize: 20,
                            fontWeight: FontWeight.bold),
                      ),
                    ),
                  )
                : Container(),
            clickOnImport == 'export'
                ? Align(
                    alignment: Alignment.center,
                    child: Container(
                      child: Text(
                        exportSmsStatus == "None" ? '' : exportSmsStatus,
                        style: const TextStyle(
                            color: Colors.blue,
                            fontSize: 20,
                            fontWeight: FontWeight.bold),
                      ),
                    ),
                  )
                : Container(),
          ],
        ),
      ),
    );
  }
}

更多关于Flutter短信导出导入插件sms_export_import的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter短信导出导入插件sms_export_import的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是如何在Flutter项目中使用sms_export_import插件的详细代码示例。这个插件允许你导出和导入短信。请注意,实际使用这些功能可能需要额外的权限处理,并且在不同平台上可能会有所不同。

1. 添加依赖

首先,你需要在pubspec.yaml文件中添加sms_export_import插件的依赖:

dependencies:
  flutter:
    sdk: flutter
  sms_export_import: ^x.y.z  # 请替换为最新版本号

然后运行flutter pub get来安装依赖。

2. 请求权限

在Android和iOS上,你需要请求读写短信的权限。

Android

AndroidManifest.xml中添加权限:

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

    <uses-permission android:name="android.permission.READ_SMS"/>
    <uses-permission android:name="android.permission.WRITE_SMS"/>
    <uses-permission android:name="android.permission.RECEIVE_SMS"/>

    <!-- 其他配置 -->

</manifest>

在Dart代码中请求权限(例如使用permission_handler插件):

import 'package:permission_handler/permission_handler.dart';

Future<void> requestSmsPermissions() async {
  var status = await Permission.sms.status;
  if (!status.isGranted) {
    var result = await Permission.sms.request();
    if (!result.isGranted) {
      // 权限被拒绝
    }
  }
}

iOS

Info.plist中添加权限描述:

<key>NSMessagesUsageDescription</key>
<string>此应用需要访问您的短信以进行导出和导入操作。</string>

3. 使用sms_export_import插件

以下是如何使用sms_export_import插件导出和导入短信的示例代码:

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('SMS Export Import Example'),
        ),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: <Widget>[
              ElevatedButton(
                onPressed: () async {
                  try {
                    String exportResult = await SmsExportImport.exportSms();
                    print('Exported SMS: $exportResult');
                    // 你可以将exportResult保存到文件或进行其他处理
                  } catch (e) {
                    print('Error exporting SMS: $e');
                  }
                },
                child: Text('Export SMS'),
              ),
              SizedBox(height: 20),
              ElevatedButton(
                onPressed: () async {
                  try {
                    // 假设你有一个包含短信内容的字符串importData
                    String importData = "SMS_CONTENT_HERE";  // 替换为实际的短信内容
                    bool importResult = await SmsExportImport.importSms(importData);
                    print('Import result: $importResult');
                  } catch (e) {
                    print('Error importing SMS: $e');
                  }
                },
                child: Text('Import SMS'),
              ),
            ],
          ),
        ),
      ),
    );
  }
}

注意事项

  1. 权限处理:在实际应用中,务必确保用户已经授予了必要的权限,并在用户拒绝权限时提供适当的反馈。
  2. 数据格式:导入的短信数据需要符合插件要求的格式,这通常是在文档中有详细说明的。
  3. 平台差异:不同平台(Android和iOS)在处理短信权限和数据格式时可能有所不同,请仔细阅读插件的文档和示例代码。

这个示例提供了一个基本的框架,你可以根据需要进行扩展和修改。

回到顶部