2

When I request permission to access the location, the program crashes. I searched a lot, but I did not find a neat solution. any solution?

the code:

Future<Position> _determinePosition() async {
    LocationPermission permission;

    permission = await _geolocatorPlatform.checkPermission();
    if (permission == LocationPermission.denied) {
      permission = await _geolocatorPlatform.requestPermission();
    }

    if (permission == LocationPermission.deniedForever) {
      // Permissions are denied forever, handle appropriately.
      return Future.error(Exception(
          'Location permissions are permanently denied, we cannot request permissions.'));
    }

    // When we reach here, permissions are granted and we can
    // continue accessing the position of the device.
    return await _geolocatorPlatform.getCurrentPosition();
  }

my manifest:

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />

when crash:

D/AndroidRuntime(12834): Shutting down VM E/AndroidRuntime(12834): FATAL EXCEPTION: main E/AndroidRuntime(12834): Process: com.example.tracker, PID: 12834 E/AndroidRuntime(12834): java.lang.RuntimeException: Failure delivering result ResultInfo{who=@android:requestPermissions:, request=109, result=-1, data=Intent { act=android.content.pm.action.REQUEST_PERMISSIONS (has extras) }} to activity {com.example.tracker/com.example.tracker.MainActivity}: java.lang.IllegalStateException: Reply already submitted E/AndroidRuntime(12834): at android.app.ActivityThread.deliverResults(ActivityThread.java:5453) E/AndroidRuntime(12834): at android.app.ActivityThread.handleSendResult(ActivityThread.java:5492) E/AndroidRuntime(12834): at android.app.servertransaction.ActivityResultItem.execute(ActivityResultItem.java:54) E/AndroidRuntime(12834): at android.app.servertransaction.ActivityTransactionItem.execute(ActivityTransactionItem.java:45) E/AndroidRuntime(12834): at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135) E/AndroidRuntime(12834): at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95) E/AndroidRuntime(12834): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2282) E/AndroidRuntime(12834): at android.os.Handler.dispatchMessage(Handler.java:106) E/AndroidRuntime(12834): at android.os.Looper.loopOnce(Looper.java:210) E/AndroidRuntime(12834): at android.os.Looper.loop(Looper.java:299) E/AndroidRuntime(12834): at android.app.ActivityThread.main(ActivityThread.java:8250) E/AndroidRuntime(12834): at java.lang.reflect.Method.invoke(Native Method) E/AndroidRuntime(12834): at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:556) E/AndroidRuntime(12834): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1045) E/AndroidRuntime(12834): Caused by: java.lang.IllegalStateException: Reply already submitted E/AndroidRuntime(12834): at io.flutter.embedding.engine.dart.DartMessenger$Reply.reply(DartMessenger.java:430) E/AndroidRuntime(12834): at io.flutter.plugin.common.MethodChannel$IncomingMethodCallHandler$1.error(MethodChannel.java:272) E/AndroidRuntime(12834): at com.shounakmulay.telephony.sms.SmsMethodCallHandler.execute(SmsMethodCallHandler.kt:169) E/AndroidRuntime(12834): at com.shounakmulay.telephony.sms.SmsMethodCallHandler.onRequestPermissionsResult(SmsMethodCallHandler.kt:378) E/AndroidRuntime(12834): at io.flutter.embedding.engine.FlutterEngineConnectionRegistry$FlutterEngineActivityPluginBinding.onRequestPermissionsResult(FlutterEngineConnectionRegistry.java:777) E/AndroidRuntime(12834): at io.flutter.embedding.engine.FlutterEngineConnectionRegistry.onRequestPermissionsResult(FlutterEngineConnectionRegistry.java:409) E/AndroidRuntime(12834): at io.flutter.embedding.android.FlutterActivityAndFragmentDelegate.onRequestPermissionsResult(FlutterActivityAndFragmentDelegate.java:757) E/AndroidRuntime(12834): at io.flutter.embedding.android.FlutterFragment.onRequestPermissionsResult(FlutterFragment.java:915) E/AndroidRuntime(12834): at io.flutter.embedding.android.FlutterFragmentActivity.onRequestPermissionsResult(FlutterFragmentActivity.java:549) E/AndroidRuntime(12834): at android.app.Activity.dispatchRequestPermissionsResult(Activity.java:8781) E/AndroidRuntime(12834): at android.app.Activity.dispatchActivityResult(Activity.java:8634) E/AndroidRuntime(12834): at android.app.ActivityThread.deliverResults(ActivityThread.java:5446) E/AndroidRuntime(12834): ... 13 more D/OOMEventManagerFK(12834): checkEventAndDumpForJE: 0 I/Process (12834): Sending signal. PID: 12834 SIG: 9 Lost connection to device.

2 Answers2

0

try this:

      Future<Position> _determinePosition()  async {
            bool serviceEnabled;
            LocationPermission permission;
        // Test if Location services are enabled.
            serviceEnabled = await Geolocator.isLocationServiceEnabled();
            if (!serviceEnabled) {
              // Location services are not enabled don't continue
              // accessing the position and request users of the
              // App to enable the Location services.
              await Geolocator.openLocationSettings();
              return Future.error('Location services are disabled.');
            }
        
            permission = await Geolocator.checkPermission();
        
            if (permission == LocationPermission.denied) {
              await Geolocator.requestPermission();
              if (permission != LocationPermission.denied) {
                // Location services are not enabled don't continue
                // accessing the position and request users of the
                // App to enable the Location services.
                return Future.error('Location permissions are disabled.');
              }
            }
            if (permission == LocationPermission.deniedForever) {
              return Future.error('Location permissions are disabled permanently.');
            }
            return await _geolocatorPlatform.getCurrentPosition();
          }
Mashood .H
  • 926
  • 6
  • 16
0

Make sure you have followed these steps for the geolocator library.

1.At first setup build.gradle->enter image description here

  1. also add ->

    android{

    ...

    configurations.all { resolutionStrategy.force 'com.google.android.gms:play- services-location:20.0.0' } }enter image description here

3.For my case I have downgraded the library to geolocator:^8.1.0.

4.Now finally I got my lat lng without crashing my app perfectly this way-

final geo.Position position = await 
geo.Geolocator.getCurrentPosition(desiredAccuracy: 
geo.LocationAccuracy.high);
  lat = position.latitude;
  lng = position.longitude;
Tanvir Ahmed
  • 564
  • 6
  • 13