简体   繁体   中英

Google maps not working with ionic cordova run android

I am building an app using the ionic framework. The primary function of the app is based around google maps. I have used this tutorial which uses the java script google maps API. Everything works perfectly when I run ionic lab or ionic serve however when using an android emulator by running: ionic cordova run android the place where the google maps should be is totally blank. I do not get any error messages either. Additionally I am using cordova version 7.0.1 and ionic version 3.5.0. I have tried both the solutions listed in this question and the problem is still occurring.

Here is the hopefully relevant parts of config.xml as the other post suggested

<content src="index.html" />
<access origin="*" />
<access origin="http://maps.google.com" />
<access launch-external="yes" origin="geo:*" />
<allow-navigation href="http://ionic.local/*" />
<allow-intent href="http://*/*" />
<allow-intent href="https://*/*" />
<allow-intent href="tel:*" />
<allow-intent href="sms:*" />
<allow-intent href="mailto:*" />
<allow-intent href="geo:*" />
<access origin="*" />
<allow-navigation href="*" />
<allow-intent href="*" />
<allow-intent href="http://maps.google.com" />
<preference name="webviewbounce" value="false" />
<preference name="UIWebViewBounce" value="false" />
<preference name="DisallowOverscroll" value="true" />
<preference name="android-minSdkVersion" value="16" />
<preference name="BackupWebStorage" value="none" />
<preference name="SplashMaintainAspectRatio" value="true" />
<preference name="FadeSplashScreenDuration" value="300" />
<preference name="SplashShowOnlyFirstTime" value="false" />
<preference name="SplashScreen" value="screen" />
<preference name="SplashScreenDelay" value="3000" />
<platform name="android">
    <allow-intent href="market:*" />

Additionally here is the index.html where I link to the api

<script src="https://maps.google.com/maps/api/js?key=
MY_ACTUAL_API_KEY" type="text/javascript"></script>
<script src="cordova.js"></script>

As requested here is the ts html and css for the home page which uses google maps html

<ion-header>
<ion-navbar>
<ion-title>
  Smell Louisville
</ion-title>
</ion-navbar>
</ion-header>

<ion-content>

<ion-fab top right><button ion-fab round [color]="refr"id="Refr"     
(click)="refMap();setStuff();pickColor();getLatLng();markerOnLocal()"><ion-
icon name="refresh-circle"></ion-icon></button></ion-fab>

<div #map id="map"></div>
<div id="pad"></div>
<button (click)="openFormPage()" id="hundPer" ion-button outline     
[color]="button1"><div #LeavRev id="LeaVRev"><p id="CenterP">Report how your     
air smells</p></div></button>
<div id="pad"></div>
<button (click)="openPastPage();"id="hundPer" ion-button outline 
[color]="button2"> <div #Prev id="PreV"><p id="CenterP">View maps from 
previous days</p></div></button>
<div id="hundPer">
<button id="hundPer">
<button (click)="openSettingsPage()"><ion-icon id="right"name="settings">    
</ion-icon></button>
<button (click)="openAboutPage()"><ion-icon id="right"name="people"></ion-
icon></button>
<button (click)="openPMPage()" id="pad"><ion-icon id="right">PM2.5</ion-
icon>    
</button>
<button (click)="openCitationPage()" id="pad"><ion-icon id="right" 
name="clipboard"></ion-icon></button>
<button (click)="openHelpPage()" id="pad"><ion-icon id="right" name="help">
</ion-icon></button>
<button (click)="openKeySendPage()" id="pad"><ion-icon id="right" 
name="key"></ion-icon></button>
</button>
</div>

css

page-home {
#map{height:75%}


#LeavRev{border:solid
;border-color: green}
#Prev{border:solid
;border-color: royalblue}
#pad{height:1%}
#padL{height:1%; width:10%; float:left}
#padR{height:1%; width:100%; float: right; background-color:#E5E5E5}
#refr{background-color: #6dc066;border:solid;align-content:right;border-                
color: green;color:whitesmoke}

#CenterP{text-align: center}
#hundPer{width:100%}

#right{float:right}
#left{float:left}

}

ts hopefully just the relevant parts

import { Component, ViewChild } from '@angular/core';
import { NavController, NavParams, Events,AlertController } from 'ionic-
angular';
import { Geolocation } from '@ionic-native/geolocation';
import { FormPage } from '../form/form';
import { PastPage } from '../past/past';
import { AboutPage} from '../about/about';
import { HelpPage} from '../help/help';
import { KeySendPage } from '../key-send/key-send'
import { SettingsPage } from '../settings/settings';
import{ Storage } from '@ionic/storage';
import{Pm2_5Page} from '../pm2-5/pm2-5';
import {CitationPage} from '../citation/citation';
import{SendMarkerProvider } from '../../providers/send-marker/send-
marker';
import {NotificationsPage} from '../notifications/notifications';


import { AngularFireDatabase } from 'angularfire2/database';
//leaving out parts not pertaining to google maps
export class HomePage {
@ViewChild('map') mapElement;
map: any;
constructor(public navCtrl: NavController, public geolocation: Geolocation,         
public navParams: NavParams,
public storage:Storage, public events: Events, public     
sendMarker:SendMarkerProvider, private alertCtrl: AlertController,
private fdb:AngularFireDatabase){
//there is some stuff in the constructor but hopefully it is not relevant I 
//trying to reduce the amount of code you have to read through
 }
 ionViewDidLoad(){
console.log(this.mapInitDid)
this.mapInitDid=false;
this.initMap();
}

//initMap() is supposed to load the map and it doesnt on the android 
//emulator
initMap(){
this.geolocation.getCurrentPosition().then((position) => {
let latLng = new google.maps.LatLng(38.2527, -85.7585)
pos=new google.maps.LatLng(38.2527, -85.7585);
console.log(this.havePerms);
console.log(latLng)

  if(this.havePerms==1){
  latLng = new google.maps.LatLng(position.coords.latitude,         
position.coords.longitude);
  }
  let mapOptions = {
    center: latLng,
    zoom: 10,
    mapTypeId: google.maps.MapTypeId.ROADMAP
  }

  this.map = new google.maps.Map(this.mapElement.nativeElement, mapOptions);

}, (err) => {
  console.log(err);
});

 console.log("map is go");
 this.mapInitDid=true;
// this.markerOnLocal();
}
}

Any help would be much appreciated

As it turns out I was in fact solving the wrong problem. The api was loading fine however the device was not running any of the code inside

this.geolocation.getCurrentPosition().then((position) => {
...
});

which contained all of my code for generating the map. To solve the problem I took everthing inside of this section not pertaining to the users location and put it inside initMap() which is the method where this.geolocation.get... was located

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM