Фрагмент карты Google показывает контейнер карты, но не отображает карту - PullRequest
0 голосов
/ 08 декабря 2018

Я следил за видео во время создания этого проекта, но видео было 3 года, как и ожидалось, зависимости были устаревшими, поэтому я изменил некоторые из них, и никаких ошибок не было найдено.

приложение работает гладко, но единственная функциячто я нацелился на работу, а не на карту Google.

Вот мой вариант на всякий случай,

implementation 'com.android.support:appcompat-v7:28.0.0'
implementation 'com.android.support.constraint:constraint-layout:1.1.3'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
implementation files('libs/aapt2-3.2.1-4818971-windows.jar')
implementation 'com.android.support:design:28.0.0'
implementation 'com.google.android.gms:play-services-maps:16.0.0'

Манифест Android

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="com.blogspot.skooltchdev.tabbedapplicationmaster">
        <uses-permission android:name="android.permission.INTERNET"/>
        <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
        <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
        <uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES"/>
        <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
        <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
        <application
            android:allowBackup="true"
            android:icon="@mipmap/ic_launcher"
            android:label="@string/app_name"
            android:supportsRtl="true"
            android:theme="@style/MyMaterialTheme">

            <activity android:name=".MainActivity">
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />

                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
            <meta-data
                android:name="com.google.android.geo.API_KEY"
                android:value=" My_API_KEY"/>
        </application>
        <uses-feature
            android:glEsVersion="0x00020000"
            android:required="true"/>
</manifest>

MainActivity.java

public class MainActivity extends AppCompatActivity {

private Toolbar toolbar;
private TabLayout tabLayout;
private ViewPager viewPager;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);

    getSupportActionBar().setDisplayHomeAsUpEnabled(false);

    viewPager = (ViewPager) findViewById(R.id.viewpager);
    setupViewPager(viewPager);

    tabLayout = (TabLayout) findViewById(R.id.tabs);
    tabLayout.setupWithViewPager(viewPager);
}

private void setupViewPager(ViewPager viewPager) {
    ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());
    adapter.addFragment(new FirstFragment(), "Map");
    adapter.addFragment(new SecondFragment(), "fragment two");
    adapter.addFragment(new ThirdFragment(), "fragment three");
    viewPager.setAdapter(adapter);
}

class ViewPagerAdapter extends FragmentPagerAdapter {
    private final List<Fragment> mFragmentList = new ArrayList<>();
    private final List<String> mFragmentTitleList = new ArrayList<>();

    public ViewPagerAdapter(FragmentManager manager) {
        super(manager);
    }

    @Override
    public Fragment getItem(int position) {
        return mFragmentList.get(position);
    }

    @Override
    public int getCount() {
        return mFragmentList.size();
    }

    public void addFragment(Fragment fragment, String title) {
        mFragmentList.add(fragment);
        mFragmentTitleList.add(title);
    }

    @Override
    public CharSequence getPageTitle(int position) {
        return mFragmentTitleList.get(position);
    }
}
}

FirstFragment.java

public class FirstFragment extends Fragment implements OnMapReadyCallback {

GoogleMap mGoogleMap;
MapView mMapView;
View mView;

public FirstFragment() {
    // Required empty public constructor
}

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
}


@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {

    mView = inflater.inflate(R.layout.first_fragment, container, false);
    return mView;
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);

    mMapView = (MapView) mView.findViewById(R.id.map);
    if(mMapView !=null){
        mMapView.onCreate(null);
        mMapView.onResume();
        mMapView.getMapAsync(this);
    }

}

@Override
public void onMapReady(GoogleMap googleMap) {
    MapsInitializer.initialize(getActivity());
    LatLng Home = new LatLng(10.263392,123.82489109999999);
    mGoogleMap = googleMap;
    googleMap.setMapType(GoogleMap.MAP_TYPE_NORMAL);
    googleMap.addMarker(new MarkerOptions().position(Home).title("my home"));
    googleMap.moveCamera(CameraUpdateFactory.newLatLng(Home));
}

}

first_fragment.xml

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".FirstFragment">

<com.google.android.gms.maps.MapView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/map">

</com.google.android.gms.maps.MapView>

</FrameLayout>

Я уже пытался включить биллинг на облачной платформе Google (потому что они изменилисьмного чего недавно), меняя api несколько раз (на console.dev ...), чисти и перестраивай.тем не менее, он по-прежнему показывает карту Google без маркера и карты (просто белый, без Google в нижней части, просто обычный).

1 Ответ

0 голосов
/ 08 декабря 2018

попробуйте это Инициировать карту сначала на mapview.oncreate не отправлять ноль

    MapsInitializer.initialize(this);
        mMapView = (MapView) mView.findViewById(R.id.map);
        if(mMapView !=null){
        mMapView.onCreate(savedInstanceState);

        mMapView.getMapAsync(this);
        }

        }

@Override
public void onMapReady(GoogleMap googleMap) {
        LatLng Home = new LatLng(10.263392,123.82489109999999);
        mGoogleMap = googleMap;
        googleMap.setMapType(GoogleMap.MAP_TYPE_NORMAL);
        googleMap.addMarker(new MarkerOptions().position(Home).title("my home"));
        googleMap.animateCamera(CameraUpdateFactory.newLatLng(Home));
        }   


 public void onResume() {
    super.onResume();
    mapView.onResume();
}

public void onPause() {
    super.onPause();
    mapView.onPause();
}

public void onDestroy() {
    super.onDestroy();
    mapView.onDestroy();
}

protected void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    mapView.onSaveInstanceState(outState);
}

public void onLowMemory() {
    super.onLowMemory();
    mapView.onLowMemory();
}

предложение : вместо moveCamera используйте animateCamera, лучше

...