javascript - Ionic Geolocation 适用于浏览器但不适用于 android 模拟器
问题描述
我目前正在从事一个 Ionic 项目,我需要在该项目中获取外部 API。所以我决定使用 OpenWeatherMap API。问题:设法获取 Ionic 网站的位置,但是一旦导入到模拟器 API 中没有显示任何内容。我目前正在使用选项卡式导航。如果可以调查 tab1.page.ts 将不胜感激
模拟器错误图像 - 由模拟器运行:
然而,The Webworks for API - Run by Ionic serve
app.module.ts
import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { RouteReuseStrategy } from '@angular/router';
import { AngularFireModule } from '@angular/fire';
import { AngularFirestoreModule} from '@angular/fire/firestore';
import { environment } from '../environments/environment';
import { IonicModule, IonicRouteStrategy } from '@ionic/angular';
import { SplashScreen } from '@ionic-native/splash-screen/ngx';
import { StatusBar } from '@ionic-native/status-bar/ngx';
import { AppComponent } from './app.component';
import { AppRoutingModule } from './app-routing.module';
import { Insomnia } from '@ionic-native/insomnia/ngx';
import { NavigationBar } from '@ionic-native/navigation-bar/ngx';
import { LocalNotifications } from '@ionic-native/local-notifications/ngx';
import { Geolocation } from '@ionic-native/geolocation/ngx';
import { AngularFireAuthModule } from '@angular/fire/auth';
import firebase from 'firebase/app';
import {AndroidPermissions} from '@ionic-native/android-permissions/ngx'
@NgModule({
declarations: [AppComponent],
entryComponents: [],
imports: [BrowserModule, IonicModule.forRoot(), AppRoutingModule,AppRoutingModule,
AngularFireModule.initializeApp(environment.firebase),
AngularFireAuthModule,
AngularFirestoreModule],
providers: [{ provide: RouteReuseStrategy, useClass: IonicRouteStrategy},
Insomnia, SplashScreen, StatusBar, NavigationBar, LocalNotifications, Geolocation, AndroidPermissions],
bootstrap: [AppComponent],
})
export class AppModule {}
app.component.ts
import { Component } from '@angular/core';
import { Platform } from '@ionic/angular';
import { SplashScreen } from '@ionic-native/splash-screen/ngx';
import { StatusBar } from '@ionic-native/status-bar/ngx';
import { AndroidPermissions } from '@ionic-native/android-permissions/ngx'
@Component({
selector: 'app-root',
templateUrl: 'app.component.html',
styleUrls: ['app.component.scss'],
})
export class AppComponent {
constructor(
private platform: Platform,
private splashScreen: SplashScreen,
private statusBar: StatusBar,
private permission: AndroidPermissions
) {
this.initializeApp();
}
initializeApp() {
this.platform.ready().then(() => {
this.statusBar.styleDefault();
this.splashScreen.hide();
this.permission.checkPermission(this.permission.PERMISSION.ACCESS_COARSE_LOCATION).then((result) =>{
if(!result.hasPermission){
this.permission.requestPermission(this.permission.PERMISSION.ACCESS_COARSE_LOCATION);
}
}, (err) => {
this.permission.requestPermission(this.permission.PERMISSION.ACCESS_COARSE_LOCATION);
})
});
}
}
tab1.page.ts
import { Component, OnInit } from '@angular/core';
import { Geolocation } from '@ionic-native/geolocation/ngx';
import { HttpClient } from '@angular/common/http';
import { Platform } from '@ionic/angular';
import { AndroidPermissions } from '@ionic-native/android-permissions/ngx'
@Component({
selector: 'app-tab1',
templateUrl: 'tab1.page.html',
styleUrls: ['tab1.page.scss']
})
export class Tab1Page implements OnInit {
id: string = "";
place: string = "";
type: string = "";
icon: string = "";
temperature: string = "";
lat: any
long: any
constructor(public httpClient: HttpClient, public geolocation: Geolocation, public platform: Platform, private permission: AndroidPermissions) {
}
ngOnInit() {
console.log("Hello there from tabs")
this.geolocation.getCurrentPosition().then(position => {
this.lat = position.coords.latitude
this.long = position.coords.longitude
console.log(this.lat)
console.log(this.long)
})
this.getCurrentlocation()
this.platform.ready().then(() => {
this.requestpermissions();
this.getCurrentlocation();
});
}
async getCurrentlocation() {
const position = await this.geolocation.getCurrentPosition().then((position) => {
var latitude = position.coords.latitude;
var longtitude = position.coords.longitude;
this.getCurrentTemperature(latitude, longtitude);
console.log(latitude)
console.log(longtitude)
})
}
getCurrentTemperature(latitude, longitude) {
var url = "https://api.openweathermap.org/data/2.5/weather?lat=" + latitude + "&lon=" + longitude + "&appid=96ed99f24b94a5d5fd1f928c39feefa1"
this.httpClient.get(url).subscribe((data) => {
var obj = <any>data;
this.place = obj.name;
this.id = obj.id;
console.log(this.id)
this.type = obj.weather[0].main;
this.icon = "http://openweathermap.org/img/w/" + obj.weather[0].icon + ".png";
this.temperature = ((parseFloat(obj.main.temp) - 273.15).toFixed(2)).toString() + " Celsius";
})
}
requestpermissions() {
this.permission.checkPermission(this.permission.PERMISSION.ACCESS_COARSE_LOCATION).then((result) => {
if (!result.hasPermission) {
this.permission.requestPermission(this.permission.PERMISSION.ACCESS_COARSE_LOCATION);
this.getCurrentlocation();
}
}, (err) => {
this.permission.requestPermission(this.permission.PERMISSION.ACCESS_COARSE_LOCATION);
this.getCurrentlocation();
})
}
}
tab1.page.html
<ion-header [translucent]="true">
<ion-toolbar>
<ion-buttons slot="start">
<ion-menu-button></ion-menu-button>
</ion-buttons>
<ion-title>Home</ion-title>
</ion-toolbar>
</ion-header>
<ion-content padding>
<div class="ion-padding">
<span><img src={{icon}}><span style="position: relative; bottom: 15px;;"> {{temperature}} in
{{place}} , {{type}}</span></span>
{{id}}
</div>
</ion-content>
解决方案
推荐阅读
- node.js - 根据设备重定向
- angular - 单元测试登录组件
- java - Google Recaptcha 错误 [invalid-input-response]
- javascript - 使用 jquery 用新值更新表
- php - 如何在php中的每个特殊字符之前添加反斜杠
- xpath - Getting single element with similar xpaths but with different same level, "neighboring" node
- android - 如何在android中重定向端口?
- apache-kafka - avro.io.AvroTypeException:数据 [object] 不是模式的示例
- python - 将大型 wav 文件(或任何大型文件)读取/处理到 python 的最快方法
- android - 如何避免在 DayNight 模式下重新启动更改方向的活动?