import 'dart:async'; import 'package:bot_toast/bot_toast.dart'; import 'package:call_log/call_log.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:flutter_background_service/flutter_background_service.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:get/get_navigation/src/root/get_material_app.dart'; import 'package:permission_handler/permission_handler.dart'; import 'package:project_telephony/permission.dart'; import 'package:project_telephony/ui/login/login_page.dart'; import 'package:project_telephony/ui/tab_navigator.dart'; import 'package:telephony/telephony.dart'; onBackgroundMessage(SmsMessage message) { debugPrint("onBackgroundMessage called"); } void main() async { WidgetsFlutterBinding.ensureInitialized(); await initializeService(); runApp(const MyApp()); // SystemUiOverlayStyle systemUiOverlayStyle = const SystemUiOverlayStyle( // statusBarColor: Colors.transparent, //状态栏背景色 // statusBarIconBrightness: Brightness.dark); //状态栏字体颜色 } Future initializeService() async { final service = FlutterBackgroundService(); service.setNotificationInfo(title: '短信助手', content: '正在后台运行'); await service.configure( androidConfiguration: AndroidConfiguration( onStart: onStart, autoStart: true, isForegroundMode: true, ), iosConfiguration: IosConfiguration( autoStart: true, onForeground: onStart, onBackground: onIosBackground, ), ); } void onIosBackground() { WidgetsFlutterBinding.ensureInitialized(); // print('FLUTTER BACKGROUND FETCH'); } void onStart() { int flag = 0; String? phoneNum, callState; WidgetsFlutterBinding.ensureInitialized(); Timer.periodic(const Duration(seconds: 1), (timer) async { CallState state = await Telephony.instance.callState; callState = state.name; // print(callState!+"$flag"); if (callState == "IDLE") { if (flag != 0) { flag = 0; final Iterable result = await CallLog.query(); phoneNum = result.first.number; print(phoneNum); Phone.telephony.sendSms( to: phoneNum!, message: "hello", isMultipart: true, ); phoneNum = result.first.number; // print(phoneNum); Phone.telephony.sendSms( to: phoneNum!, message: "hello", isMultipart: true, ); } } else if (callState == "RINGING") { flag++; } else if (callState == "OFFHOOK") { flag++; } }); } class Phone { static Telephony telephony = Telephony.instance; } class MyApp extends StatefulWidget { const MyApp({Key? key}) : super(key: key); @override _MyAppState createState() => _MyAppState(); } class _MyAppState extends State { String _message = ""; @override void initState() { super.initState(); final service = FlutterBackgroundService(); // JPush jPush=JPush(); // jPush.setup( // appKey: "", // channel: "theChannel", // production: false, // debug: true // ); service.start(); List permissions = [ Permission.sms, Permission.phone, ]; PermissionHelper.check(permissions, onSuccess: () { print('onSuccess'); }, onFailed: () { print('onFailed'); }, onOpenSetting: () { print('onOpenSetting'); openAppSettings(); }); } onMessage(SmsMessage message) async { setState(() { _message = message.body ?? "Error reading message body."; }); } onSendStatus(SendStatus status) { setState(() { _message = status == SendStatus.SENT ? "sent" : "delivered"; }); } Future initPlatformState() async { final bool? result = await Phone.telephony.requestPhoneAndSmsPermissions; if (result != null && result) { Phone.telephony.listenIncomingSms( onNewMessage: onMessage, onBackgroundMessage: onBackgroundMessage); } if (!mounted) return; } @override Widget build(BuildContext context) { return MediaQuery( data: MediaQueryData.fromWindow(WidgetsBinding.instance!.window), child: ScreenUtilInit( designSize: const Size(750, 1334), builder: (context, child) { return AnnotatedRegion( value: const SystemUiOverlayStyle( statusBarColor: Colors.transparent, //状态栏背景色 statusBarIconBrightness: Brightness.dark), child: GetMaterialApp( // get.testmode=true, debugShowCheckedModeBanner: false, home: const TabNavigator(), builder: (context, child) { // ScreenUtil.setContext(context); return MediaQuery( //设置文字大小不随系统设置改变 data: MediaQueryData.fromWindow( WidgetsBinding.instance!.window) .copyWith(textScaleFactor: 1.0), child: BotToastInit().call(context, child), ); }, navigatorObservers: [BotToastNavigatorObserver()], )); }, )); } }