- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我从 HERE 的官方入门指南 pdf 中完全复制了这段代码,但是当我尝试运行它时,它在 componentFragment.init()
上失败并显示 UNKNOWN
错误。
错误详情:
java.lang.RuntimeException: Cannot initialize the engine twice
at com.nokia.maps.MapsEngine.<init>(MapsEngine.java:604)
at com.nokia.maps.MapsEngine.b(MapsEngine.java:897)
at com.nokia.maps.MapsEngine.b(MapsEngine.java:394)
at com.nokia.maps.MapsEngine.a(MapsEngine.java:346)
at com.here.android.mpa.common.MapEngine.init(MapEngine.java:129)
at com.nokia.maps.al.a(CompositeFragmentImpl.java:92)
at com.here.android.mpa.ar.CompositeFragment.init(CompositeFragment.java:108)
at hu.appz4.heretest.BasicMapActivity.init(BasicMapActivity.java:106)
at hu.appz4.heretest.BasicMapActivity.onRequestPermissionsResult(BasicMapActivity.java:97)
at hu.appz4.heretest.BasicMapActivity.checkPermissions(BasicMapActivity.java:80)
at hu.appz4.heretest.BasicMapActivity.onCreate(BasicMapActivity.java:58)
at android.app.Activity.performCreate(Activity.java:6272)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1108)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2387)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2494)
at android.app.ActivityThread.access$900(ActivityThread.java:157)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1356)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5551)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:730)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:620)
BasicMapActivity.java
package hu.appz4.heretest;
import android.Manifest;
import android.Manifest.permission;
import android.app.Activity;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;
import com.here.android.mpa.ar.ARController;
import com.here.android.mpa.ar.ARController.Error;
import com.here.android.mpa.ar.ARIconObject;
import com.here.android.mpa.ar.CompositeFragment;
import com.here.android.mpa.common.GeoCoordinate;
import com.here.android.mpa.common.Image;
import com.here.android.mpa.common.MapEngine;
import com.here.android.mpa.common.OnEngineInitListener;
import com.here.android.mpa.mapping.Map;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class BasicMapActivity extends Activity {
/**
* permissions request code
*/
private final static int REQUEST_CODE_ASK_PERMISSIONS = 1000;
/**
* Permissions that need to be explicitly requested from end user.
*/
private static final String[] REQUIRED_SDK_PERMISSIONS = new String[]{Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.CAMERA, permission.ACCESS_NETWORK_STATE, permission.ACCESS_WIFI_STATE,
permission.INTERNET};
private Map map;
private ARController arController;
// buttons which will allow the user to start LiveSight and add objects
private Button startButton;
private Button stopButton;
private Button toggleObjectButton;
// ARIconObject represents the image model which LiveSight accepts for display
private ARIconObject arIconObject;
private boolean objectAdded;
private CompositeFragment compositeFragment;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
checkPermissions();
}
/**
* Checks the dynamically-controlled permissions and requests missing permissions from end user.
*/
protected void checkPermissions() {
final List<String> missingPermissions = new ArrayList<String>();
// check all required dynamic permissions
for (final String permission : REQUIRED_SDK_PERMISSIONS) {
final int result = ContextCompat.checkSelfPermission(this, permission);
if (result != PackageManager.PERMISSION_GRANTED) {
missingPermissions.add(permission);
}
}
if (!missingPermissions.isEmpty()) {
// request all missing permissions
final String[] permissions = missingPermissions.toArray(new String[missingPermissions.size()]);
ActivityCompat.requestPermissions(this, permissions, REQUEST_CODE_ASK_PERMISSIONS);
} else {
final int[] grantResults = new int[REQUIRED_SDK_PERMISSIONS.length];
Arrays.fill(grantResults, PackageManager.PERMISSION_GRANTED);
onRequestPermissionsResult(REQUEST_CODE_ASK_PERMISSIONS, REQUIRED_SDK_PERMISSIONS, grantResults);
}
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String permissions[], @NonNull int[] grantResults) {
switch (requestCode) {
case REQUEST_CODE_ASK_PERMISSIONS:
for (int index = permissions.length - 1; index >= 0; --index) {
if (grantResults[index] != PackageManager.PERMISSION_GRANTED) {
// exit the app if one permission is not granted
Toast.makeText(this, "Required permission '" + permissions[index] + "' not granted, exiting", Toast.LENGTH_LONG).show();
finish();
return;
}
}
// all permissions were granted
init();
break;
}
}
private void init() {
setContentView(R.layout.activity_main);
// Search for the composite fragment to finish setup by calling init().
compositeFragment = (CompositeFragment) getFragmentManager().findFragmentById(R.id.compositefragment);
compositeFragment.init(this, new OnEngineInitListener() {
@Override
public void onEngineInitializationCompleted(OnEngineInitListener.Error error) {
if (error == OnEngineInitListener.Error.NONE) {
// retrieve a reference of the map from the composite fragment
map = compositeFragment.getMap();
// Set the map center to the Vancouver Downtown region
map.setCenter(new GeoCoordinate(47.529877, 19.032750, 0.0), Map.Animation.NONE);
// Set the map zoom level to the average between min and max
map.setZoomLevel((map.getMaxZoomLevel() + map.getMinZoomLevel()) / 2);
// LiveSight setup should be done after fragment init is complete
setupLiveSight();
} else {
Toast.makeText(BasicMapActivity.this, "ERROR: Cannot initialize Composite Fragment" + " - " + error.getDetails(), Toast.LENGTH_SHORT).show();
System.out.println("ERROR: Cannot initialize Composite Fragment" + " - " + error.getDetails());
}
}
});
// hold references to the buttons for future use
startButton = (Button) findViewById(R.id.startLiveSight);
stopButton = (Button) findViewById(R.id.stopLiveSight);
toggleObjectButton = (Button) findViewById(R.id.toggleObject);
startButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(final View v) {
startLiveSight(v);
}
});
stopButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(final View v) {
stopLiveSight(v);
}
});
toggleObjectButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(final View v) {
toggleObject(v);
}
});
}
private void setupLiveSight() {
// ARController should not be used until fragment init has completed
arController = compositeFragment.getARController();
// tells LiveSight to display icons while viewing the map (pitch down)
arController.setUseDownIconsOnMap(true);
// tells LiveSight to use a static mock location instead of the devices GPS fix
arController.setAlternativeCenter(new GeoCoordinate(47.529877, 19.032750, 0.0));
}
public void startLiveSight(View view) {
if (arController != null) {
// triggers the transition from Map mode to LiveSight mode
Error error = arController.start();
if (error == Error.NONE) {
startButton.setVisibility(View.GONE);
stopButton.setVisibility(View.VISIBLE);
} else {
Toast.makeText(getApplicationContext(), "Error starting LiveSight: " + error.toString(), Toast.LENGTH_LONG).show();
}
} else {
Toast.makeText(getApplicationContext(), "ArController NULL", Toast.LENGTH_LONG).show();
}
}
public void stopLiveSight(View view) {
if (arController != null) {
// exits LiveSight mode and returns to Map mode
Error error = arController.stop(true);
if (error == Error.NONE) {
startButton.setVisibility(View.VISIBLE);
stopButton.setVisibility(View.GONE);
} else {
Toast.makeText(getApplicationContext(), "Error stopping LiveSight: " + error.toString(), Toast.LENGTH_LONG).show();
}
}
}
public void toggleObject(View view) {
if (arController != null) {
if (!objectAdded) {
if (arIconObject == null) {
final Image image = new Image();
try {
image.setImageResource(R.mipmap.ic_launcher);
} catch (IOException e) {
e.printStackTrace();
}
// creates a new icon object which uses the same image in up and down views
arIconObject = new ARIconObject(new GeoCoordinate(47.529877, 19.032750, 2.0), (View) null, image);
}
// adds the icon object to LiveSight to be rendered
arController.addARObject(arIconObject);
objectAdded = true;
toggleObjectButton.setText("Remove Object");
} else {
// removes the icon object from LiveSight, it will no longer be renderedarController.removeARObject(arIconObject);
objectAdded = false;
toggleObjectButton.setText("Add Object");
}
}
}
}
build.Gradle依赖(按照guide.pdf中的步骤导入官方HERE-sdk.aar)
dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
exclude group: 'com.android.support', module: 'support-annotations'
})
compile 'com.android.support:appcompat-v7:25.2.0'
testCompile 'junit:junit:4.12'
compile project(':HERE-sdk')
}
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest package="hu.appz4.heretest"
xmlns:android="http://schemas.android.com/apk/res/android">
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<!-- Additional permission for LiveSight
<uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION" />-->
<uses-permission android:name="android.permission.CAMERA"/>
<application
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:theme="@style/Theme.AppCompat">
<activity
android:name="hu.appz4.heretest.BasicMapActivity"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
<meta-data
android:name="com.here.android.maps.appid"
android:value="the app id from HERE site"/>
<meta-data
android:name="com.here.android.maps.apptoken"
android:value="the app code from HERE site"/>
<meta-data
android:name="com.here.android.maps.license.key"
android:value="the license key from HERE site"/>
</application>
</manifest>
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="hu.appz4.heretest.BasicMapActivity">
<fragment
class="com.here.android.mpa.ar.CompositeFragment"
android:id="@+id/compositefragment"
android:layout_width="fill_parent"
android:layout_height="fill_parent"/>
<Button
android:id="@+id/startLiveSight"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true"
android:onClick="startLiveSight"
android:text="@string/label_button_startlivesight" />
<Button
android:id="@+id/stopLiveSight"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:onClick="stopLiveSight"
android:text="@string/label_button_stoplivesight"
android:visibility="gone" />
<Button
android:id="@+id/toggleObject"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:onClick="toggleObject"
android:text="@string/label_button_addobject" />
<ImageView
android:id="@+id/imageView"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</RelativeLayout>
最佳答案
我不小心通过将这段代码添加到 AndroidManifest.xml
中解决了这个问题<service
android:name="com.here.android.mpa.service.MapService"
android:exported="true"
android:label="HereMapService"
android:process="global.Here.Map.Service.v2">
<intent-filter>
<action android:name="com.here.android.mpa.service.MapService"/>
</intent-filter>
</service>
关于android - HERE CompositeFragment MAP 无法初始化引擎两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42694070/
我是 Spring 新手,这就是我想要做的事情: 我正在使用一个基于 Maven 的库,它有自己的 Spring 上下文和 Autowiring 字段。 它的bean配置文件是src/test/res
我在我的测试脚本中有以下列表初始化: newSequenceCore=["ls", "ns", "*", "cm", "*", "ov", "ov", "ov", "ov", "kd"] (代表要在控
这个问题在这里已经有了答案: 关闭 11 年前。 Possible Duplicate: Class construction with initial values 当我查看 http://en.
我得到了成员变量“objectCount”的限定错误。编译器还返回“ISO C++ 禁止非常量静态成员的类内初始化”。这是主类: #include #include "Tree.h" using n
我有如下所示的a.h class A { public: void doSomething()=0; }; 然后我有如下所示的b.h #include "a.h" class b: publi
我需要解析 Firebase DataSnapshot (一个 JSON 对象)转换成一个数据类,其属性包括 enum 和 list。所以我更喜欢通过传递 DataSnapshot 来手动解析它进入二
我使用 JQuery 一段时间了,我总是使用以下代码来初始化我的 javascript: $(document).ready( function() { // Initalisation logic
这里是 Objective-C 菜鸟。 为什么会这样: NSString *myString = [NSString alloc]; [myString initWithFormat:@"%f", s
我无法让核心数据支持的 NSArrayController 在我的代码中正常工作。下面是我的代码: pageArrayController = [[NSArrayController alloc] i
我对这一切都很陌生,并且无法将其安装到我的后端代码中。它去哪里?在我的页脚下面有我所有的 JS? 比如,这是什么意思: Popup initialization code should be exec
这可能是一个简单的问题,但是嘿,我是初学者。 所以我创建了一个程序来计算一些东西,它目前正在控制台中运行。我决定向其中添加一个用户界面,因此我使用 NetBeans IDE 中的内置功能创建了一个 J
我有 2 个 Controller ,TEST1Controller 和 TEST2Controller 在TEST2Controller中,我有一个initialize()函数设置属性值。 如果我尝
据我所知, dependentObservable 在声明时会进行计算。但如果某些值尚不存在怎么办? 例如: var viewModel ={}; var dependentObservable1 =
我正在阅读 POODR 这本书,它使用旧语法进行默认值初始化。我想用新语法实现相同的功能。 class Gear attr_reader :chainring, :cog, :wheel de
我按照 polymer 教程的说明进行操作: https://www.polymer-project.org/3.0/start/install-3-0 (我跳过了可选部分) 但是,在我执行命令“po
很抱歉问到一个非常新手的Kotlin问题,但是我正在努力理解与构造函数和初始化有关的一些东西。 我有这个类和构造函数: class TestCaseBuilder constructor(
假设我们有一个包含 30 列和 30 行的网格。 生命游戏规则简而言之: 一个小区有八个相邻小区 当一个细胞拥有三个存活的相邻细胞时,该细胞就会存活 如果一个细胞恰好有两个或三个活的相邻细胞,那么它就
我是 MQTT 和 Android 开放附件“AOA” 的新手。在阅读教程时,我意识到,在尝试写入 ByteArrayOutputStream 类型的变量之前,应该写入 0 或 0x00首先到该变量。
我有 2 个 Controller ,TEST1Controller 和 TEST2Controller 在TEST2Controller中,我有一个initialize()函数设置属性值。 如果我尝
我有一个inotify /内核问题。我正在使用“inotify” Python项目进行观察,但是,我的问题仍然是固有的关于inotify内核实现的核心。 Python inotify项目处理递归ino
我是一名优秀的程序员,十分优秀!