Browse Source

优化权限获取逻辑

newdev_shunjiawei
liwei1dao 1 year ago
parent
commit
42b3a6ded1
  1. 2
      lib/core/bindings/initial_binding.dart
  2. 8
      lib/data/services/location_manager.dart
  3. 1
      lib/modules/agent/controllers/agent_controller.dart
  4. 9
      lib/modules/navigation/bindings/navigation_binding.dart
  5. 5
      lib/modules/navigation/controllers/navigation_controller.dart
  6. 17
      lib/modules/navigation/views/navigation_view.dart
  7. 7
      lib/modules/pairing/controllers/pairing_controller.dart
  8. 8
      lib/routes/app_pages.dart
  9. 16
      local_plugins/location_service/ios/location_service.podspec

2
lib/core/bindings/initial_binding.dart

@ -1,3 +1,4 @@
import 'package:deep_voice/data/services/location_manager.dart';
import 'package:deep_voice/data/services/music_manager.dart';
import 'package:deep_voice/data/services/navigation_manager.dart';
import 'package:get/get.dart';
@ -37,6 +38,7 @@ class InitialBinding extends Bindings {
// MusicManager
Get.lazyPut<MusicManager>(() => MusicManager(), fenix: true);
Get.lazyPut<NavigationManager>(() => NavigationManager(), fenix: true);
Get.lazyPut<LocationManager>(() => LocationManager(), fenix: true);
// 火山AI服务
// Get.lazyPut<VolcanoAIService>(() => VolcanoAIService(), fenix: true);

8
lib/data/services/location_manager.dart

@ -1,10 +1,8 @@
import 'package:deep_voice/core/utils/logger.dart';
import 'package:get/get.dart';
import 'package:location_service/location_service.dart';
import 'package:music_service/music_service.dart';
import 'package:permission_handler/permission_handler.dart';
import '../../core/utils/permission_util.dart';
import 'package:flutter/material.dart';
//音乐播放管理
class LocationManager extends GetxService {
@ -24,10 +22,10 @@ class LocationManager extends GetxService {
Future<void> requestNotificationPermission() async {
final granted = await PermissionUtil.instance.requestPermission(
// context: context,
permissionType: Permission.notification,
permissionType: Permission.locationAlways,
permissionName: '通知',
explanationText: '需要通知权限来显示音乐播放状态。',
permanentDenialText: '您已永久拒绝通知权限,请前往设置开启权限。',
explanationText: '需要定位权限来获取当前位置。',
permanentDenialText: '您已永久定位通知权限,请前往设置开启权限。',
settingsButtonText: '去设置',
cancelButtonText: '取消',
);

1
lib/modules/agent/controllers/agent_controller.dart

@ -2,6 +2,7 @@ import 'dart:async';
import 'dart:convert';
import 'dart:io';
import 'package:amap_service/amap_service.dart';
import 'package:deep_voice/data/services/location_manager.dart';
import 'package:deep_voice/data/services/music_manager.dart';
import 'package:deep_voice/data/services/navigation_manager.dart';
import 'package:flutter/material.dart';

9
lib/modules/navigation/bindings/navigation_binding.dart

@ -1,9 +0,0 @@
import 'package:get/get.dart';
import '../controllers/navigation_controller.dart';
class NavigationBinding extends Bindings {
@override
void dependencies() {
Get.lazyPut<NavigationController>(() => NavigationController());
}
}

5
lib/modules/navigation/controllers/navigation_controller.dart

@ -1,5 +0,0 @@
import 'package:get/get.dart';
class NavigationController extends GetxController {
static NavigationController get to => Get.find(); //单例访问模式
}

17
lib/modules/navigation/views/navigation_view.dart

@ -1,17 +0,0 @@
import 'package:deep_voice/modules/navigation/controllers/navigation_controller.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
class NavigationView extends GetView<NavigationController> {
const NavigationView({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: const Text('地图展示')),
body: Stack(
children: [],
),
);
}
}

7
lib/modules/pairing/controllers/pairing_controller.dart

@ -136,6 +136,8 @@ class PairingController extends GetxController {
/// 跳过配对
void skipPairing() async {
Logger.i(_tag, '用户选择跳过配对');
// 权限申请
await _checkAndRequestPermissions();
// 启动BLE后台服务
await BleManager.to.startAgentService();
Logger.i(_tag, 'BLE后台服务已启动');
@ -575,6 +577,8 @@ class PairingController extends GetxController {
if (Platform.isAndroid && await _getAndroidSdkVersion() >= 31) {
requiredPermissions.add(Permission.bluetoothScan);
requiredPermissions.add(Permission.bluetoothConnect);
requiredPermissions.add(Permission.locationAlways);
requiredPermissions.add(Permission.notification);
}
// 逐个请求权限
@ -608,6 +612,9 @@ class PairingController extends GetxController {
String _getPermissionName(Permission permission) {
if (permission == Permission.location) return '定位';
if (permission == Permission.locationWhenInUse) return '定位';
if (permission == Permission.locationAlways) return '定位';
if (permission == Permission.notification) return '通知';
if (permission == Permission.accessNotificationPolicy) return '通知';
if (permission == Permission.bluetoothScan) return '蓝牙扫描';
if (permission == Permission.bluetoothConnect) return '蓝牙连接';
return '未知权限';

8
lib/routes/app_pages.dart

@ -1,4 +1,3 @@
import 'package:deep_voice/modules/navigation/views/navigation_view.dart';
import 'package:get/get.dart';
import '../modules/feedback/bindings/feedback_bindings.dart';
import '../modules/feedback/views/feedback_view.dart';
@ -184,13 +183,6 @@ abstract class AppPages {
transition: Transition.rightToLeft,
transitionDuration: Duration(milliseconds: 250),
),
GetPage(
name: Routes.navigation,
page: () => const NavigationView(),
binding: AgentBinding(),
transition: Transition.rightToLeft,
transitionDuration: Duration(milliseconds: 250),
),
GetPage(
name: Routes.realtime,
page: () => const RealtimeView(),

16
local_plugins/location_service/ios/location_service.podspec

@ -15,15 +15,13 @@ A new Flutter project.
s.source = { :path => '.' }
s.source_files = 'location_service/Sources/location_service/**/*'
s.dependency 'Flutter'
s.dependency 'AMapNavi', '~> 10.0.900'
s.static_framework = true
s.pod_target_xcconfig = {
'DEFINES_MODULE' => 'YES',
'EXCLUDED_ARCHS[sdk=iphonesimulator*]' => 'i386'
}
s.platform = :ios, '12.0'
# Flutter.framework does not contain a i386 slice.
s.pod_target_xcconfig = { 'DEFINES_MODULE' => 'YES', 'EXCLUDED_ARCHS[sdk=iphonesimulator*]' => 'i386' }
s.swift_version = '5.0'
# If your plugin requires a privacy manifest, for example if it uses any
# required reason APIs, update the PrivacyInfo.xcprivacy file to describe your
# plugin's privacy impact, and then uncomment this line. For more information,
# see https://developer.apple.com/documentation/bundleresources/privacy_manifest_files
# s.resource_bundles = {'location_service_privacy' => ['location_service/Sources/location_service/PrivacyInfo.xcprivacy']}
end

Loading…
Cancel
Save