import 'dart:async'; import 'dart:ui'; import 'package:call_log/call_log.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter_background_service/flutter_background_service.dart'; import 'package:shared_preferences/shared_preferences.dart'; import 'package:telephony/telephony.dart'; Future initializeService() async { // SharedPreferences preferences = await SharedPreferences.getInstance(); final service = FlutterBackgroundService(); await service.configure( androidConfiguration: AndroidConfiguration( // this will be executed when app is in foreground or background in separated isolate onStart: onStart, // auto start service autoStart: true, isForegroundMode: true, ), iosConfiguration: IosConfiguration( // auto start service autoStart: true, // this will be executed when app is in foreground in separated isolate onForeground: onStart, // you have to enable background fetch capability on xcode project onBackground: onIosBackground, ), ); service.startService(); } // } bool onIosBackground(ServiceInstance service) { WidgetsFlutterBinding.ensureInitialized(); print('FLUTTER BACKGROUND FETCH'); return true; } void onStart(ServiceInstance service) async { DartPluginRegistrant.ensureInitialized(); int flag = 0; String? phoneNum = ""; int? callRecords = 0; String callState; service.on('stopService').listen((event) { service.stopSelf(); }); Timer.periodic(const Duration(seconds: 1), (timer) async { final SharedPreferences prefs = await SharedPreferences.getInstance(); CallState state = await Telephony.instance.callState; callState = state.name; // print("$callState$flag"); // print(entry.first.duration); String? ref = prefs.getString('refSms'); String? con = prefs.getString('conSms'); String? call = prefs.getString('callSms'); String? idle = prefs.getString('idleSms'); bool? callSw = prefs.getBool('callSwitch'); bool? idleSw = prefs.getBool('idleSwitch'); int? numberSet = prefs.getInt("numIndex"); List? numberList = prefs.getStringList("addressList"); List? noNumberList = prefs.getStringList("specified"); print("号码设置$numberSet 通讯列表$numberList 指定不发送$noNumberList"); if (callState == "IDLE") { if (flag != 0) { final Iterable entry = await CallLog.query(); phoneNum = entry.first.number; callRecords = entry.first.duration; print(phoneNum); switch (numberSet) { case 0: if (!(noNumberList?.contains(phoneNum))!) { if (flag > 0) { print("来电拒接/未接"); print("${phoneNum!}:${ref!}"); Telephony.backgroundInstance .sendSms(to: phoneNum!, message: ref); print("发送成功"); } else if (flag == -1) { print("来电接听"); print("${phoneNum!}:${con!}"); Telephony.backgroundInstance .sendSms(to: phoneNum!, message: con); } else { if (entry.first.duration! > 0) { if (callSw!) { print(callSw); print("${phoneNum!}:${call!}"); Telephony.backgroundInstance .sendSms(to: phoneNum!, message: call); } print("去电接听"); } else { if (idleSw!) { print(idleSw); print("${phoneNum!}:${idle!}"); Telephony.backgroundInstance .sendSms(to: phoneNum!, message: idle); } print("去电未接"); } print("发送成功"); } flag = 0; }else{ print("123412434124132312232341241242321312312323123323"); } break; case 1: if ((numberList?.contains(phoneNum))! && !(noNumberList?.contains(phoneNum))!) { if (flag > 0) { print("来电拒接/未接"); print("${phoneNum!}:${ref!}"); Telephony.backgroundInstance .sendSms(to: phoneNum!, message: ref); print("发送成功"); } else if (flag == -1) { print("来电接听"); print("${phoneNum!}:${con!}"); Telephony.backgroundInstance .sendSms(to: phoneNum!, message: con); } else { if (entry.first.duration! > 0) { if (callSw!) { print(callSw); print("${phoneNum!}:${call!}"); Telephony.backgroundInstance .sendSms(to: phoneNum!, message: call); } print("去电接听"); } else { if (idleSw!) { print(idleSw); print("${phoneNum!}:${idle!}"); Telephony.backgroundInstance .sendSms(to: phoneNum!, message: idle); } print("去电未接"); } print("发送成功"); } flag = 0; }else{ print("123412434124132312232341241242321312312323123323"); } break; case 2: if (!(numberList?.contains(phoneNum))! && !(noNumberList?.contains(phoneNum))!) { if (flag > 0) { print("来电拒接/未接"); print("${phoneNum!}:${ref!}"); Telephony.backgroundInstance .sendSms(to: phoneNum!, message: ref); print("发送成功"); } else if (flag == -1) { print("来电接听"); print("${phoneNum!}:${con!}"); Telephony.backgroundInstance .sendSms(to: phoneNum!, message: con); } else { if (entry.first.duration! > 0) { if (callSw!) { print(callSw); print("${phoneNum!}:${call!}"); Telephony.backgroundInstance .sendSms(to: phoneNum!, message: call); } print("去电接听"); } else { if (idleSw!) { print(idleSw); print("${phoneNum!}:${idle!}"); Telephony.backgroundInstance .sendSms(to: phoneNum!, message: idle); } print("去电未接"); } print("发送成功"); } flag = 0; }else{ print("123412434124132312232341241242321312312323123323"); } break; } } } else if (callState == "RINGING") { //响铃 flag = 1; print('通话'); } else if (callState == "OFFHOOK") { //通话 if (flag > 0) flag *= -1; if (flag == 0) flag = -2; print('不通话'); } }); }