mauron85/cordova-plugin-background-geolocation

mauron85 / cordova-plugin-background-geolocation Error in Ionic 6 Android

ivinantony opened this issue · 17 comments

This plugin gives error in ionic 6 android due to android permission

ionic info

Ionic:

Ionic CLI : 6.19.0 (/usr/local/lib/node_modules/@ionic/cli)
Ionic Framework : @ionic/angular 6.0.12
@angular-devkit/build-angular : 13.2.6
@angular-devkit/schematics : 13.2.6
@angular/cli : 13.2.6
@ionic/angular-toolkit : 6.1.0

Cordova:

Cordova CLI : 11.0.0
Cordova Platforms : android 10.1.1
Cordova Plugins : cordova-plugin-ionic-keyboard 2.2.0, cordova-plugin-ionic-webview 5.0.0, (and 3 other plugins)

Utility:

cordova-res : 0.15.4
native-run : 1.5.0

System:

ios-deploy : 1.11.4
NodeJS : v16.14.0 (/usr/local/bin/node)
npm : 8.1.0
OS : macOS Monterey
Xcode : Xcode 13.3 Build version 13E113

  • Plugin version: Latest version
  • Platform: Android
  • OS version:
  • Device manufacturer and model:
  • Running in Simulator:
  • Cordova version (cordova -v): 11.0.0
  • Cordova platform version (cordova platform ls):
  • Plugin configuration options:
  • Link to your project:

Context

In Ios its working fine but in android while creating build it shows error of android permission.

Expected Behavior

Its should not have any issue while android build

Actual Behavior

Task :app:mergeDebugResources FAILED

FAILURE: Build failed with an exception.

  • What went wrong:
    Execution failed for task ':app:mergeDebugResources'.

Could not resolve all files for configuration ':app:debugRuntimeClasspath'.
Could not find com.intentfilter:android-permissions:0.1.7.
Searched in the following locations:
- https://dl.google.com/dl/android/maven2/com/intentfilter/android-permissions/0.1.7/android-permissions-0.1.7.pom
- https://repo.maven.apache.org/maven2/com/intentfilter/android-permissions/0.1.7/android-permissions-0.1.7.pom
Required by:
project :app

  • Try:

Possible Fix

   - https://dl.google.com/dl/android/maven2/com/intentfilter/android-permissions/0.1.7/android-permissions-0.1.7.pom
   - https://repo.maven.apache.org/maven2/com/intentfilter/android-permissions/0.1.7/android-permissions-0.1.7.pom
   - no files found here.

Steps to Reproduce

1.create an ionic 6 app
2. installed this plugin
3.create android build
Screenshot 2022-03-16 at 11 14 24 PM

Context

Debug logs

@josuelmm thank you it works but it doesnt give data when app is in background

Use this plugin https://github.com/HaylLtd/cordova-background-geolocation-plugin/

@mauron85 @josuelmm i used this plugin but when we allow the permission and after 2,3 second app is crashing in android. do you have any idea? and it doesn't work in background in android after 5 or 6 minutes too

I have this configuration

this.configBackground = {
      stopOnTerminate:false,
      locationProvider:2,
      desiredAccuracy: 0,
      stationaryRadius: 0,
      distanceFilter: 0,
      debug: false,
      interval:3000,
      fastestInterval:2000,
      notificationsEnabled:true,
      startForeground:false,
      notificationTitle:' ',
      notificationText:'Navegación activada',
      notificationIconColor: '#c50707',
      notificationIconLarge:'ic_tracking',
      notificationIconSmall:'ic_tracking',
    };    

Working excelent in background with the application minimized...

@josuelmm thanks. but for me in ios app is getting crashing while allowing the permissio

VIDEO-2022-03-27-19-39-45.mp4

n

Request permission of ACTIVITY_RECOGNITION before permission location
Use the plugin https://ionicframework.com/docs/native/android-permissions

thank you so much @josuelmm i will try this.

this.androidPermissions.requestPermission('android.permission.ACTIVITY_RECOGNITION') .then(result => { if (!result.hasPermission){ this.permissionActivity = false; }else{ this.permissionActivity = true; } }) .catch(err=>{ this.permissionActivity = false; });

@josuelmm does it works for you in ios too? for me it works for a 5 minutes in ios and android almost 1 hour. after that this plugin also goes sleep.can i see the way you integrated?

You must request permission to run in the background, and notify the client that they must remove the battery saving app.

You do the battery permission with powerOptimization
import { PowerOptimization } from '@awesome-cordova-plugins/power-optimization/ngx';

async requestPermissionLocationForever(){ this.androidPermissions.requestPermission('android.permission.ACCESS_BACKGROUND_LOCATION') .then(result => { if (!result.hasPermission){ this.permissionActivityForever = false; }else{ this.permissionActivityForever = true; } }) .catch(err=>{ this.permissionActivityForever = false; }); }

`async RequestOptimizations(){
this.powerOptimization.RequestOptimizations().then(status =>{
this.IsIgnoringBatteryOptimizations();
this.IsIgnoringDataSaver();
this.HaveProtectedAppsCheck();
})
.catch(error => {
this.permissionBattery = false;
});
}

async IsIgnoringDataSaver(show = false){
this.powerOptimization.IsIgnoringDataSaver().then((status) => {
this.permissionBackground = status;
if (status == false && show == true){
this.powerOptimization.RequestDataSaverMenu().then((result) => {}, (err) => {});
}
}, (err) => {
this.permissionBackground = false;
});
}

async IsIgnoringBatteryOptimizations(show = false){
this.powerOptimization.IsIgnoringBatteryOptimizations().then(status =>{
if (status == false && show == true){
this.showAlertBattery();
}

  if (status == false){
    setTimeout(()=>{
      this.IsIgnoringBatteryOptimizations();
      this.IsIgnoringDataSaver();
      this.HaveProtectedAppsCheck();
    },10000);
  }
  this.permissionBattery = status;
})
.catch(error => {
  this.permissionBattery = false;
});

}

async HaveProtectedAppsCheck(){
this.powerOptimization.HaveProtectedAppsCheck().then((result) => {
this.permissionBatteryProtect = result;
}, (err) => {
this.permissionBatteryProtect = false;
});
}`

@josuelmm thank you so much for your help this all helped me a lot. Thanks for your updates.

@josuelmm is there any directly to the location permission instead of opening the all permissions like in this pic?
image

@josuelmm but that plugin not working in Samsung can you show me an example how you are asking permission and all

Use this plugin https://github.com/HaylLtd/cordova-background-geolocation-plugin/

So, is this plugin "@mauron85/cordova-plugin-background-geolocation" to be ignored now and this one to be used instead "https://github.com/HaylLtd/cordova-background-geolocation-plugin/" ? I'm asking because Ionic page points to this plugin.

Si correcto @steven-fernandez

Gracias :)

Use this plugin https://github.com/HaylLtd/cordova-background-geolocation-plugin/

hi, I try to compile for andorid with that plugin but I get an error too, any tips? I already try to removed/add android platform.

error: cannot access zzbfm
        confidence = activity.getConfidence();
                             ^
  class file for com.google.android.gms.internal.zzbfm not found

image