如何修复在华为和三星设备中加载GPS位置

时间:2019-03-29 11:31:00

标签: android angularjs html5 gps android-gps

我有一个与Angularjs一起使用的表单,该表单通过一个按钮收集包括GPS位置在内的用户数据。 (该应用为混合应用)

我尝试更改代码中的某些内容,但无法正常工作。而且Google无法提供任何解决方案。

代码如下:

<div class="content-field">
    <div class="gps-field" ng-class="$ctrl.field.value? 'has-data' : ''" ng-click="getPosition()" type="button">
        <i class="icon-ami-gps-loc" ng-style="{color: $ctrl.fieldstyle.link_color}"></i>
        <label>{{ 'gpsInformation' | translate }}</label>
    </div>
    <i class="icon-ami-erase-fields-q clear-field" ng-click="clearData()"></i>
    <div class="gps-data" ng-class="$ctrl.field.value? 'active' : ''">{{ (($ctrl.field && $ctrl.field.value)? 'gpsPositionString': 'gpsPlaceholder') | translate:$ctrl.field.value }}</div>
</div>

这是课程:

class GeolocationField {
  constructor (GeolocationService, LoaderFactory, ErrFactory, $translate, $scope, $rootScope) {
    Object.defineProperties(this,{
      'GeolocationService': { value: GeolocationService },
      'LoaderFactory': { value: LoaderFactory },
      'ErrFactory': { value: ErrFactory },
      '$rootScope': { value: $rootScope }
    });
    $scope.getPosition = this.getPosition.bind(this);
    $scope.clearData = this.clearData.bind(this);
  }

  getPosition () {
    if (this.$rootScope.readOnly) return;

    this.LoaderFactory.show();
    this.LoaderFactory.initShowCancelButtonText();

    Promise.race([
      this.GeolocationService.getCurrentPosition(),
      ( new Promise((res,rej) => this.LoaderFactory.once('updated:Interruption',() => {
        if (this.LoaderFactory.getInterruption()) rej(new this.ErrFactory.QuietError())
      })) )
    ])
    .then((position) => {
      this.field.value = position;
    })
    .catch((err) => {
      if (err instanceof this.ErrFactory.DeniedPermissionForGeolocation.IOS) {
        return err.confirm()
        .then((ans) => {
          if (ans != 2) return;
          else return cordova.plugins.settings.open();
        })
      }
      else if (err instanceof this.ErrFactory) return err.notify();
      else console.error(err);
    })
    .then(() => { this.LoaderFactory.hide() });
  };
  clearData () {
    if (this.$rootScope.readOnly) return;

    this.field.value = '';
  };
}

GeolocationField.reqest_str = 'gpsPlaceholder';
GeolocationField.anwer_str = 'gpsPositionString';

app.component('gpsField', {
    templateUrl: './scripts/components/geolocation-field/template.html',
    controller: GeolocationField,
    bindings : {
        item: '<',
        field: '<',
        fieldstyle: '<'
    },
});

根据要求,在Chrome,IOS设备和一些android设备(RedMI,Tecno ...)上,最长可以运行5秒。

问题出在Huawei P Smart,Samsung S9和Samsung Tab 6上,它在5分钟后一直显示加载程序。

关于这些设备,我会缺少一些规范吗?还请注意,我本机实现了此功能...不使用任何插件。

0 个答案:

没有答案