我遵循了Skobbler的Android教程,可以在这里找到:
http://developer.skobbler.com/getting-started/android
在我的应用程序中,我无法使用SKMapFragment,因为我需要一个android.support.v4.app.Fragment用于我的其余应用程序逻辑。这就是我选择SKMapViewHolder方法的原因。
我的片段代码如下所示:
import android.graphics.Bitmap;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import com.skobbler.ngx.map.SKAnnotation;
import com.skobbler.ngx.map.SKCoordinateRegion;
import com.skobbler.ngx.map.SKMapCustomPOI;
import com.skobbler.ngx.map.SKMapPOI;
import com.skobbler.ngx.map.SKMapSurfaceListener;
import com.skobbler.ngx.map.SKMapSurfaceView;
import com.skobbler.ngx.map.SKMapViewHolder;
import com.skobbler.ngx.map.SKPOICluster;
import com.skobbler.ngx.map.SKScreenPoint;
import nl.afdelingapps.android.boschxp.R;
import nl.afdelingapps.android.boschxp.view.BaseFragment;
import nl.afdelingapps.android.boschxp.helper.SkobblerHelper;
/**
* Created by bartburg on 27-10-2015.
*/
public class RouteMapFragment extends BaseFragment implements SKMapSurfaceListener {
private SKMapViewHolder mapViewGroup;
private SKMapSurfaceView mapView;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View inflatedView = inflater.inflate(R.layout.fragment_skobbler, container, false);
mapViewGroup = (SKMapViewHolder) inflatedView.findViewById(R.id.map_surface_holder);
mapViewGroup.setMapSurfaceListener(this);
return inflatedView;
}
@Override
public boolean getForceRefresh() {
return false;
}
@Override
public String getFragmentName() {
return "CenterMapFragment";
}
@Override
public void onPause() {
super.onPause();
if (mapView != null) {
mapView.onPause();
}
}
@Override
public void onResume() {
super.onResume();
if (mapView != null) {
mapView.onResume();
}
}
@Override
public void onActionPan() {
}
@Override
public void onActionZoom() {
}
@Override
public void onSurfaceCreated(SKMapViewHolder skMapViewHolder) {
mapView = mapViewGroup.getMapSurfaceView();
mapView.applySettingsFromFile(SkobblerHelper.getMapCreatorFilePath(getContext()));
}
@Override
public void onMapRegionChanged(SKCoordinateRegion skCoordinateRegion) {
}
@Override
public void onMapRegionChangeStarted(SKCoordinateRegion skCoordinateRegion) {
}
@Override
public void onMapRegionChangeEnded(SKCoordinateRegion skCoordinateRegion) {
}
@Override
public void onDoubleTap(SKScreenPoint skScreenPoint) {
}
@Override
public void onSingleTap(SKScreenPoint skScreenPoint) {
}
@Override
public void onRotateMap() {
}
@Override
public void onLongPress(SKScreenPoint skScreenPoint) {
}
@Override
public void onInternetConnectionNeeded() {
}
@Override
public void onMapActionDown(SKScreenPoint skScreenPoint) {
}
@Override
public void onMapActionUp(SKScreenPoint skScreenPoint) {
}
@Override
public void onPOIClusterSelected(SKPOICluster skpoiCluster) {
}
@Override
public void onMapPOISelected(SKMapPOI skMapPOI) {
}
@Override
public void onAnnotationSelected(SKAnnotation skAnnotation) {
}
@Override
public void onCustomPOISelected(SKMapCustomPOI skMapCustomPOI) {
}
@Override
public void onCompassSelected() {
}
@Override
public void onCurrentPositionSelected() {
}
@Override
public void onObjectSelected(int i) {
}
@Override
public void onInternationalisationCalled(int i) {
}
@Override
public void onBoundingBoxImageRendered(int i) {
}
@Override
public void onGLInitializationError(String s) {
}
@Override
public void onScreenshotReady(Bitmap bitmap) {
}
}
真的没什么特别的。 BaseFragmentis只是一个没有花哨的抽象类。实际上只是一些谷歌分析的东西和日志记录的东西,仅此而已,它尚未用于此片段。
我的片段xml就像在教程中一样:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:mapbox="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="?attr/actionBarSize">
<com.skobbler.ngx.map.SKMapViewHolder
android:id="@+id/map_surface_holder"
android:layout_width="fill_parent"
android:layout_height="fill_parent" />
</RelativeLayout>
我遵循每一步,地图保持黑色。我在Android 4.3,5.1和6.0上测试了这个。它在所有屏幕上都是黑色的。
我的gradle文件:
buildscript {
repositories {
maven { url 'https://maven.fabric.io/public' }
}
dependencies {
classpath 'io.fabric.tools:gradle:1.+'
}
}
apply plugin: 'com.android.application'
apply plugin: 'io.fabric'
apply plugin: 'com.google.gms.google-services'
repositories {
maven { url 'https://maven.fabric.io/public' }
}
android {
compileSdkVersion 23
buildToolsVersion "23.0.1"
defaultConfig {
applicationId "nl.afdelingapps.android.boschxp"
minSdkVersion 16
targetSdkVersion 23
versionCode 11
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
testCompile 'junit:junit:4.12'
compile('com.crashlytics.sdk.android:crashlytics:2.5.5@aar') {
transitive = true;
}
compile('com.mapbox.mapboxsdk:mapbox-android-sdk:2.2.0@aar') {
transitive = true
}
compile 'com.qozix:tileview:2.0.8'
compile 'com.google.code.gson:gson:2.4'
compile 'com.google.android.gms:play-services-panorama:8.3.0'
compile 'com.android.support:appcompat-v7:23.1.1'
compile 'com.android.support:design:23.1.1'
compile 'com.android.support:support-v4:23.1.1'
compile 'uk.co.chrisjenx:calligraphy:2.1.0'
compile 'com.jakewharton:butterknife:7.0.1'
compile 'com.github.ksoichiro:android-observablescrollview:1.6.0'
compile 'com.google.android.gms:play-services-analytics:8.3.0'
compile 'de.greenrobot:eventbus:2.4.0'
compile 'de.greenrobot:java-common:2.2.0'
compile 'com.squareup.picasso:picasso:2.5.2'
compile 'com.estimote:sdk:0.9.4@aar'
compile project(':widgetsystem')
}
repositories {
maven {
url "http://developer.skobbler.com/maven/"
}
}
configurations {
skobblersdk
}
dependencies {
skobblersdk "com.skobbler.ngx:SKMaps:2.5.1"
compile files('libs/SKMaps.jar')
}
def assetsPath = "$projectDir/src/main/assets"
def libsPath = "$projectDir/libs"
def jniLibsPath = "$projectDir/src/main/jniLibs"
dependencies {
compile 'com.android.support:support-v4:23.+'
}
dependencies {
compile 'com.android.support:support-v4:23.+'
}
task installSKMaps << {
copy {
from configurations.skobblersdk
into "$buildDir/skobblersdk-down"
rename { String fileName -> 'skobblersdkres.zip' }
}
copy {
from zipTree("$buildDir/skobblersdk-down/skobblersdkres.zip")
into "$buildDir/skobblersdk-down"
}
delete("$jniLibsPath",
"$assetsPath/SKMaps.zip",
"$libsPath/SKMaps.jar")
copy {
from "${buildDir}/skobblersdk-down/jniLibs"
into "$jniLibsPath"
}
copy {
from "${buildDir}/skobblersdk-down/SKMaps.zip"
into "$assetsPath"
}
copy {
from "${buildDir}/skobblersdk-down/SKMaps.jar"
into "$libsPath"
}
delete("$buildDir/skobblersdk-down")
delete(configurations.skobblersdk)
}
截图:
我的日志显示背景中至少出现了问题:
02-12 11:15:18.207 16085-16085/nl.afdelingapps.android.boschxp W/System.err: java.lang.NoSuchMethodError: no non-static method "Lcom/skobbler/ngx/positioner/SKPosition;.getLatitude()D"
02-12 11:15:18.212 16085-16085/nl.afdelingapps.android.boschxp W/System.err: at java.lang.Runtime.nativeLoad(Native Method)
02-12 11:15:18.212 16085-16085/nl.afdelingapps.android.boschxp W/System.err: at java.lang.Runtime.doLoad(Runtime.java:435)
02-12 11:15:18.212 16085-16085/nl.afdelingapps.android.boschxp W/System.err: at java.lang.Runtime.loadLibrary(Runtime.java:370)
02-12 11:15:18.212 16085-16085/nl.afdelingapps.android.boschxp W/System.err: at java.lang.System.loadLibrary(System.java:1076)
02-12 11:15:18.212 16085-16085/nl.afdelingapps.android.boschxp W/System.err: at com.skobbler.ngx.SKMaps.<clinit>(SourceFile:59)
02-12 11:15:18.212 16085-16085/nl.afdelingapps.android.boschxp W/System.err: at nl.afdelingapps.android.boschxp.view.activity.MainActivity.onMapTexturesPrepared(MainActivity.java:349)
02-12 11:15:18.212 16085-16085/nl.afdelingapps.android.boschxp W/System.err: at com.skobbler.ngx.SKPrepareMapTextureThread$1.run(SourceFile:92)
02-12 11:15:18.212 16085-16085/nl.afdelingapps.android.boschxp W/System.err: at android.os.Handler.handleCallback(Handler.java:739)
02-12 11:15:18.212 16085-16085/nl.afdelingapps.android.boschxp W/System.err: at android.os.Handler.dispatchMessage(Handler.java:95)
02-12 11:15:18.212 16085-16085/nl.afdelingapps.android.boschxp W/System.err: at android.os.Looper.loop(Looper.java:148)
02-12 11:15:18.212 16085-16085/nl.afdelingapps.android.boschxp W/System.err: at android.app.ActivityThread.main(ActivityThread.java:5417)
02-12 11:15:18.212 16085-16085/nl.afdelingapps.android.boschxp W/System.err: at java.lang.reflect.Method.invoke(Native Method)
02-12 11:15:18.212 16085-16085/nl.afdelingapps.android.boschxp W/System.err: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
02-12 11:15:18.212 16085-16085/nl.afdelingapps.android.boschxp W/System.err: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
02-12 11:15:18.212 16085-16085/nl.afdelingapps.android.boschxp D/SkobblerNG: gJVM registerMethod error for ClassSKPosition :: getLatitude ()D
02-12 11:15:18.212 16085-16085/nl.afdelingapps.android.boschxp W/System.err: java.lang.NoSuchMethodError: no non-static method "Lcom/skobbler/ngx/positioner/SKPosition;.getLongitude()D"
02-12 11:15:18.212 16085-16085/nl.afdelingapps.android.boschxp W/System.err: at java.lang.Runtime.nativeLoad(Native Method)
02-12 11:15:18.212 16085-16085/nl.afdelingapps.android.boschxp W/System.err: at java.lang.Runtime.doLoad(Runtime.java:435)
02-12 11:15:18.212 16085-16085/nl.afdelingapps.android.boschxp W/System.err: at java.lang.Runtime.loadLibrary(Runtime.java:370)
02-12 11:15:18.212 16085-16085/nl.afdelingapps.android.boschxp W/System.err: at java.lang.System.loadLibrary(System.java:1076)
02-12 11:15:18.212 16085-16085/nl.afdelingapps.android.boschxp W/System.err: at com.skobbler.ngx.SKMaps.<clinit>(SourceFile:59)
02-12 11:15:18.212 16085-16085/nl.afdelingapps.android.boschxp W/System.err: at nl.afdelingapps.android.boschxp.view.activity.MainActivity.onMapTexturesPrepared(MainActivity.java:349)
02-12 11:15:18.212 16085-16085/nl.afdelingapps.android.boschxp W/System.err: at com.skobbler.ngx.SKPrepareMapTextureThread$1.run(SourceFile:92)
02-12 11:15:18.212 16085-16085/nl.afdelingapps.android.boschxp W/System.err: at android.os.Handler.handleCallback(Handler.java:739)
02-12 11:15:18.212 16085-16085/nl.afdelingapps.android.boschxp W/System.err: at android.os.Handler.dispatchMessage(Handler.java:95)
02-12 11:15:18.213 16085-16085/nl.afdelingapps.android.boschxp W/System.err: at android.os.Looper.loop(Looper.java:148)
02-12 11:15:18.213 16085-16085/nl.afdelingapps.android.boschxp W/System.err: at android.app.ActivityThread.main(ActivityThread.java:5417)
02-12 11:15:18.213 16085-16085/nl.afdelingapps.android.boschxp W/System.err: at java.lang.reflect.Method.invoke(Native Method)
02-12 11:15:18.213 16085-16085/nl.afdelingapps.android.boschxp W/System.err: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
02-12 11:15:18.213 16085-16085/nl.afdelingapps.android.boschxp W/System.err: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)