From 8800f4bebf64b21c9714e2f9043a34097eb6a4fd Mon Sep 17 00:00:00 2001 From: Daisy <> Date: Mon, 24 Jun 2024 09:22:31 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=89=E5=8D=93=E6=9F=A5=E7=9C=8B=E5=AF=BC?= =?UTF-8?q?=E5=87=BA=E8=AE=B0=E5=BD=95=E5=8F=8A=E5=88=86=E4=BA=AB=E4=BB=A3?= =?UTF-8?q?=E7=A0=81=E6=96=B0=E5=A2=9E=EF=BC=88=E6=9C=89=E9=97=AE=E9=A2=98?= =?UTF-8?q?=EF=BC=8C=E9=9C=80=E9=BB=84=E6=80=BB=E5=8D=8F=E5=8A=A9=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- android/app/src/main/AndroidManifest.xml | 11 ++++ .../kotlin/com/skychip/lock/MainActivity.kt | 50 ++++++++++++++++--- android/app/src/main/res/xml/file_paths.xml | 4 ++ .../exportRecordDialog_logic.dart | 1 - .../exportRecordDialog_state.dart | 1 - .../exportSuccess/exportSuccess_page.dart | 23 --------- 6 files changed, 58 insertions(+), 32 deletions(-) create mode 100644 android/app/src/main/res/xml/file_paths.xml delete mode 100644 lib/main/lockDetail/doorLockLog/exportRecordDialog/exportRecordDialog_logic.dart delete mode 100644 lib/main/lockDetail/doorLockLog/exportRecordDialog/exportRecordDialog_state.dart diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index 93cfda8c..5ec69bdd 100755 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -60,7 +60,18 @@ android:name="android.app.Application" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" + android:requestLegacyExternalStorage="true" android:usesCleartextTraffic="true"> + + + + diff --git a/android/app/src/main/kotlin/com/skychip/lock/MainActivity.kt b/android/app/src/main/kotlin/com/skychip/lock/MainActivity.kt index a4f10348..0c14a684 100755 --- a/android/app/src/main/kotlin/com/skychip/lock/MainActivity.kt +++ b/android/app/src/main/kotlin/com/skychip/lock/MainActivity.kt @@ -9,6 +9,8 @@ import io.flutter.plugin.common.MethodChannel import io.flutter.embedding.engine.FlutterEngine; import io.flutter.plugins.GeneratedPluginRegistrant import android.bluetooth.BluetoothAdapter; +import androidx.core.content.FileProvider +import java.io.File class MainActivity : FlutterActivity() { override fun onCreate(savedInstanceState: Bundle?) { @@ -16,9 +18,15 @@ class MainActivity : FlutterActivity() { GeneratedPluginRegistrant.registerWith(flutterEngine!!) MethodChannel(flutterEngine?.dartExecutor!!.binaryMessenger, "starLockFlutterSend").setMethodCallHandler { call, result -> if (call.method == "loadNativeShare") { - var map = call.arguments as Map - shareText(map["shareText"] , "分享") - } else if (call.method == "sendGetBlueStatus") { + val map = call.arguments as Map + val shareText = map["shareText"] + val urlToShare = map["urlToShare"] + if (urlToShare == "fileShare") { + shareFile(shareText) + } else { + shareText(shareText, "分享") + } + } else if (call.method == "sendGetBlueStatus") { // 蓝牙是否开启 // println("收到原生的信息了 methodmethodmethod: ${call.method}") val bluetoothAdapter: BluetoothAdapter? = BluetoothAdapter.getDefaultAdapter() @@ -56,13 +64,41 @@ class MainActivity : FlutterActivity() { startActivity(Intent.createChooser(shareIntent, null)) } + fun shareFile(filePath: String?) { + if (filePath == null) { + return + } + + val file = File(filePath) + val uri: Uri = FileProvider.getUriForFile( + this, + "${applicationContext.packageName}.fileprovider", + file + ) + + val shareIntent = Intent().apply { + action = Intent.ACTION_SEND + putExtra(Intent.EXTRA_STREAM, uri) + type = "application/octet-stream" + addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION) + } + + startActivity(Intent.createChooser(shareIntent, null)) + } + + override fun configureFlutterEngine(flutterEngine: FlutterEngine) { - GeneratedPluginRegistrant.registerWith(flutterEngine); + GeneratedPluginRegistrant.registerWith(flutterEngine) MethodChannel(flutterEngine.dartExecutor.binaryMessenger, "starLockFlutterSend").setMethodCallHandler { call, result -> - println("methodmethodmethod: ${call.method}") - // 在这里处理从 Flutter 发送过来的方法调用 if (call.method == "loadNativeShare") { - println("methodmethodmethod: ${call.method}") + val map = call.arguments as Map + val shareText = map["shareText"] + val urlToShare = map["urlToShare"] + if (urlToShare == "fileShare") { + shareFile(shareText) + } else { + shareText(shareText, "分享") + } } else { result.notImplemented() } diff --git a/android/app/src/main/res/xml/file_paths.xml b/android/app/src/main/res/xml/file_paths.xml new file mode 100644 index 00000000..7fe5a78c --- /dev/null +++ b/android/app/src/main/res/xml/file_paths.xml @@ -0,0 +1,4 @@ + + + + diff --git a/lib/main/lockDetail/doorLockLog/exportRecordDialog/exportRecordDialog_logic.dart b/lib/main/lockDetail/doorLockLog/exportRecordDialog/exportRecordDialog_logic.dart deleted file mode 100644 index 8b137891..00000000 --- a/lib/main/lockDetail/doorLockLog/exportRecordDialog/exportRecordDialog_logic.dart +++ /dev/null @@ -1 +0,0 @@ - diff --git a/lib/main/lockDetail/doorLockLog/exportRecordDialog/exportRecordDialog_state.dart b/lib/main/lockDetail/doorLockLog/exportRecordDialog/exportRecordDialog_state.dart deleted file mode 100644 index 8b137891..00000000 --- a/lib/main/lockDetail/doorLockLog/exportRecordDialog/exportRecordDialog_state.dart +++ /dev/null @@ -1 +0,0 @@ - diff --git a/lib/main/lockDetail/doorLockLog/exportSuccess/exportSuccess_page.dart b/lib/main/lockDetail/doorLockLog/exportSuccess/exportSuccess_page.dart index e36c6f27..f66c2238 100644 --- a/lib/main/lockDetail/doorLockLog/exportSuccess/exportSuccess_page.dart +++ b/lib/main/lockDetail/doorLockLog/exportSuccess/exportSuccess_page.dart @@ -1,17 +1,13 @@ -import 'dart:io'; - import 'package:flutter/material.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:get/get.dart'; import 'package:open_file/open_file.dart'; -import 'package:path_provider/path_provider.dart'; import 'package:star_lock/app_settings/app_colors.dart'; import 'package:star_lock/main/lockDetail/doorLockLog/exportSuccess/exportSuccess_logic.dart'; import 'package:star_lock/main/lockDetail/doorLockLog/exportSuccess/exportSuccess_state.dart'; import 'package:star_lock/tools/NativeInteractionTool.dart'; import 'package:star_lock/tools/submitBtn.dart'; import 'package:star_lock/tools/titleAppBar.dart'; -import 'package:url_launcher/url_launcher.dart'; class ExportSuccessPage extends StatefulWidget { const ExportSuccessPage({Key? key}) : super(key: key); @@ -94,23 +90,4 @@ class _ExportSuccessPageState extends State with RouteAware { ], ); } - - Future previewFile() async { - // 获取本地文件路径 - final Directory appDocDir = await getApplicationDocumentsDirectory(); - final String appDocPath = appDocDir.path; - final String filePath = '$appDocPath/record.xlsx'; - - // 检查文件是否存在 - final File file = File(filePath); - if (await file.exists()) { - // 使用url_launcher打开文件 - final bool launched = await launchUrl(Uri.parse(filePath)); - if (!launched) { - throw 'Could not launch $filePath'; - } - } else { - print('File does not exist'); - } - } }