Reputation: 57
Hee guys i a code for the android now the only thing i have inside of it is a google map and a piece of code that will check your location and mark it on the map, but i tried a few different codes and not any one of them workend.. i only get a error on my mobile that says your application stopped working. (i run my app on my mobile not on a emulator)
This is my Main Xml
<RelativeLayout 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"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:background="@drawable/dark_wood"
tools:context=".Main"
>
<Button
android:id="@+id/bVastLocatie"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:paddingBottom="20dp"
android:text="Butt"
android:textColor="#FFFFFF"
android:onClick="onClick_bVastLocatie"/>
<fragment
android:id="@+id/map"
android:name="com.google.android.gms.maps.SupportMapFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@+id/bVastLocatie" />
</RelativeLayout>
This is my class code:
package com.*myappname*.googleMaps;
import com.google.android.gms.maps.CameraUpdate;
import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.MapFragment;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.model.BitmapDescriptorFactory;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.MarkerOptions;
import android.location.Criteria;
import android.location.Location;
import android.location.LocationManager;
import android.os.Bundle;
import android.app.Activity;
import android.support.v4.app.FragmentActivity;
import android.view.Menu;
import android.view.View;
public class Main extends FragmentActivity {
private GoogleMap googleMap;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
setUpMapIfNeeded();
}
private void setUpMapIfNeeded() {
// TODO Auto-generated method stub
if(googleMap == null){
googleMap = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map)).getMap();
if(googleMap != null){
setUpMap();
}
}
}
private void setUpMap() {
//Enable MyLocation Layer of Google Map
googleMap.setMyLocationEnabled(true);
// Get LocationManager object from System service LOCATION_SERVICE
LocationManager locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
//Create a criteria object to retrieve provider
Criteria criteria = new Criteria();
// Get the name of the best provider
String provider = locationManager.getBestProvider(criteria, true);
//Get Current Location
Location myLocation = locationManager.getLastKnownLocation(provider);
//set map type
googleMap.setMapType(GoogleMap.MAP_TYPE_HYBRID);
//Get latitude of the current location
double latitude = myLocation.getLatitude();
//Get longitude of the current location
double longitude = myLocation.getLongitude();
//Create a LatLng object for the current location
LatLng latLng = new LatLng(latitude, longitude);
//Show the current location in Google Map
googleMap.moveCamera(CameraUpdateFactory.newLatLng(latLng));
//Zoom in the Google Map
googleMap.animateCamera(CameraUpdateFactory.zoomTo(20));
googleMap.addMarker(new MarkerOptions().position(new LatLng(latitude, longitude)).title("You are Here!"));
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
this is my manifest:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.*myappname*.googleMaps"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="11"
android:targetSdkVersion="17" />
<permission
android:name="com.*myappname*.googleMaps.permission.MAPS_RECEIVE"
android:protectionLevel="signature" />
<uses-permission android:name="com.*myappname*.googleMaps.permission.MAPS_RECEIVE" />
<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.ACCES_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCES_FINE_LOCATION" />
<uses-feature
android:glEsVersion="0x00020000"
android:required="true" />
<application
android:allowBackup="true"
android:debuggable="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<meta-data
android:name="com.google.android.maps.v2.API_KEY"
android:value="*my API KEY*" />
<!-- Start Scherm -->
<activity
android:name="com.*myappname*.googleMaps.StartScherm"
android:label="@string/app_name"
>
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<!-- Map -->
<activity
android:name="com.*myappname*.googleMaps.Main"
android:label="@string/app_name" >
<intent-filter>
<action android:name="com.*myappname*.googleMaps.MAPS" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
</application>
</manifest>
And this is my error log
05-26 21:09:10.009: E/AndroidRuntime(5394): FATAL EXCEPTION: main
05-26 21:09:10.009: E/AndroidRuntime(5394): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.*my app name*.googleMaps/com.*my app name*.googleMaps.Main}: java.lang.IllegalArgumentException: invalid provider: null
05-26 21:09:10.009: E/AndroidRuntime(5394): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2246)
05-26 21:09:10.009: E/AndroidRuntime(5394): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2296)
05-26 21:09:10.009: E/AndroidRuntime(5394): at android.app.ActivityThread.access$700(ActivityThread.java:151)
05-26 21:09:10.009: E/AndroidRuntime(5394): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1281)
05-26 21:09:10.009: E/AndroidRuntime(5394): at android.os.Handler.dispatchMessage(Handler.java:99)
05-26 21:09:10.009: E/AndroidRuntime(5394): at android.os.Looper.loop(Looper.java:137)
05-26 21:09:10.009: E/AndroidRuntime(5394): at android.app.ActivityThread.main(ActivityThread.java:5293)
05-26 21:09:10.009: E/AndroidRuntime(5394): at java.lang.reflect.Method.invokeNative(Native Method)
05-26 21:09:10.009: E/AndroidRuntime(5394): at java.lang.reflect.Method.invoke(Method.java:511)
05-26 21:09:10.009: E/AndroidRuntime(5394): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1102)
05-26 21:09:10.009: E/AndroidRuntime(5394): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:869)
05-26 21:09:10.009: E/AndroidRuntime(5394): at dalvik.system.NativeStart.main(Native Method)
05-26 21:09:10.009: E/AndroidRuntime(5394): Caused by: java.lang.IllegalArgumentException: invalid provider: null
05-26 21:09:10.009: E/AndroidRuntime(5394): at android.location.LocationManager.checkProvider(LocationManager.java:1779)
05-26 21:09:10.009: E/AndroidRuntime(5394): at android.location.LocationManager.getLastKnownLocation(LocationManager.java:1144)
05-26 21:09:10.009: E/AndroidRuntime(5394): at com.berendscheffers.googleMaps.Main.setUpMap(Main.java:62)
05-26 21:09:10.009: E/AndroidRuntime(5394): at com.berendscheffers.googleMaps.Main.setUpMapIfNeeded(Main.java:42)
05-26 21:09:10.009: E/AndroidRuntime(5394): at com.berendscheffers.googleMaps.Main.onCreate(Main.java:31)
05-26 21:09:10.009: E/AndroidRuntime(5394): at android.app.Activity.performCreate(Activity.java:5250)
05-26 21:09:10.009: E/AndroidRuntime(5394): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1097)
05-26 21:09:10.009: E/AndroidRuntime(5394): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2210)
05-26 21:09:10.009: E/AndroidRuntime(5394): ... 11 more
enter code here
I have no idea what goes wrong, i hope you guys can help me out, Cheers!
Upvotes: 0
Views: 1470
Reputation: 2975
I got mine solved by adding class="com.google.android.gms.maps.SupportMapFragment" to my fragment attributes. So your fragment should look like this
<fragment xmlns:android="http://schemas.android.com/apk/res/android"
android:name="com.google.android.gms.maps.SupportMapFragment"
android:id="@+id/map"
android:layout_width="match_parent"
android:layout_height="match_parent"
class="com.google.android.gms.maps.SupportMapFragment"
/>
I hope it helps.
Upvotes: 0
Reputation: 21
Your stacktrace: Caused by: java.lang.IllegalArgumentException: invalid provider: null
You dont have a provider, which means, you can´t get a location!
There is a new way of getting a location... Reto Meier showed it on Google I/O 2013. Check this out in 15:55 minutes: http://www.youtube.com/watch?v=GcNNx2zdXN4
Upvotes: 0
Reputation: 22232
Caused by: java.lang.ClassCastException: com.google.android.gms.maps.MapFragment cannot be cast to android.support.v4.app.Fragment
You are trying to use MapFragment
in xml and cast it to SupportMapFragment
in code. This fails even eariler, because you are using FragmentManager
and FragmentActivity
from support library.
Upvotes: 2