Я пытаюсь использовать ЗДЕСЬ карты в моем приложении. Однако у меня, кажется, есть некоторые трудности при попытке просмотра карты в представлении фрагмента. Эта проблема не возникала, когда карта отображалась в моей основной деятельности.
Я следую этим примерам за основу. Которые отлично работают при использовании в деятельности.
Я просмотрел эту тему безрезультатно.
Вы можете найти упрощенную версию моего кода, которая предназначена для просмотра карты ниже:
Основной класс занятий:
package com.example.heremapapplication;
import android.Manifest;
import android.content.pm.PackageManager;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import com.here.android.mpa.common.ApplicationContext;
public class MainActivity extends AppCompatActivity {
MapFragmentView mapFragmentView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if (ContextCompat.checkSelfPermission(getApplicationContext(), Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, 1);
}
if (ContextCompat.checkSelfPermission(getApplicationContext(), Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_COARSE_LOCATION}, 1);
}
initiateMap();
}
public void initiateMap() {
//Start map
mapFragmentView = new MapFragmentView();
mapFragmentView.setM_activity(this);
ApplicationContext applicationContext = new ApplicationContext(getApplicationContext());
mapFragmentView.initMapFragment(applicationContext, this);
getSupportFragmentManager().beginTransaction().replace(R.id.frameLayoutMapView, mapFragmentView).commit();
}
}
Фрагмент MapFragmentView:
package com.example.heremapapplication;
import android.content.Context;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.os.Environment;
import android.support.v4.app.Fragment;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.InflateException;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Toast;
import com.here.android.mpa.common.ApplicationContext;
import com.here.android.mpa.common.GeoCoordinate;
import com.here.android.mpa.common.MapEngine;
import com.here.android.mpa.common.OnEngineInitListener;
import com.here.android.mpa.common.PositioningManager;
import com.here.android.mpa.mapping.Map;
import com.here.android.mpa.mapping.MapView;
import java.io.File;
public class MapFragmentView extends Fragment {
private AppCompatActivity m_activity;
private PositioningManager positioningManager;
private MapEngine mapEngine = MapEngine.getInstance();
private MapView mapView;
private static View v;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
if (v != null) {
ViewGroup parent = (ViewGroup) v.getParent();
if (parent != null)
parent.removeView(v);
}
try {
v = inflater.inflate(R.layout.map_fragment, container, false);
} catch (InflateException e) {
/* map is already there, just return view as it is */
}
return v;
}
public MapFragmentView() {
}
private Map map;
public void initMapFragment(ApplicationContext applicationContext, Context context) {
/* Locate the mapFragment UI element */
mapView = new MapView(context);
// Set path of isolated disk cache
String diskCacheRoot = Environment.getExternalStorageDirectory().getPath()
+ File.separator + ".isolated-here-maps";
// Retrieve intent name from manifest
String intentName = "";
try {
ApplicationInfo ai = m_activity.getPackageManager().getApplicationInfo(m_activity.getPackageName(), PackageManager.GET_META_DATA);
Bundle bundle = ai.metaData;
intentName = bundle.getString("INTENT_NAME");
} catch (PackageManager.NameNotFoundException e) {
Log.e(this.getClass().toString(), "Failed to find intent name, NameNotFound: " + e.getMessage());
}
boolean success = com.here.android.mpa.common.MapSettings.setIsolatedDiskCacheRootPath(diskCacheRoot, intentName);
if (!success) {
// Setting the isolated disk cache was not successful, please check if the path is valid and
// ensure that it does not match the default location
// (getExternalStorageDirectory()/.here-maps).
// Also, ensure the provided intent name does not match the default intent name.
} else {
if (mapView != null) {
System.out.println("hop buraya girildi!");
/* Initialize the SupportMapFragment, results will be given via the called back. m_mapFragment.init(context,new OnEngineInitListener() */
mapEngine.init(applicationContext, new OnEngineInitListener() {
@Override
public void onEngineInitializationCompleted(OnEngineInitListener.Error error) {
if (error == Error.NONE) {
positioningManager = PositioningManager.getInstance();
positioningManager.start(PositioningManager.LocationMethod.GPS_NETWORK_INDOOR);
map = mapView.getMap();
GeoCoordinate myCurrentPosition = positioningManager.getPosition().getCoordinate();
} else {
Toast.makeText(m_activity,
"ERROR: Cannot initialize Map with error " + error,
Toast.LENGTH_LONG).show();
}
}
});
}
}
}
public void setM_activity(AppCompatActivity m_activity) {
this.m_activity = m_activity;
}
}
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"
android:orientation="vertical"
tools:context=".MainActivity">
<FrameLayout
android:id="@+id/frameLayoutMapView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_alignParentStart="true"
android:layout_alignParentTop="true"
app:layout_constraintTop_toTopOf="parent">
</FrameLayout>
</RelativeLayout>
map_fragment.xml
<?xml version="1.0" encoding="utf-8"?>
<fragment xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/mapFragment"
android:name="com.here.android.mpa.mapping.MapFragment"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
После запуска программы мы должны иметь возможность просматривать HEREmap на экране. Однако это не появляется.
Мы видим белый экран. И если мы отправим приложение на задний план, экран станет черным.
Большое спасибо!