Eigene Google Maps über Button starten

  • Antworten:1
  • Bentwortet
Bernd Roth
  • Forum-Beiträge: 98

30.07.2013, 20:38:21 via Website

Hallo Forum!

Ich habe folgendes Problem und komme schon seit Stunden nicht weiter:

Ich habe eine Klasse MainActivity ( leider schlecht gewählter Name, da es sich in Wirklichkeit um die 2te Klasse mit Google Maps bereits handelt! ) mit welcher ich Google Maps starten kann und mir die lokale Position anzeigen lasse.
( Diese Klasse habe ich mir aus dem Internet geholt und was sie tut verstehe ich auch. Wenn ich dieses Programm als alleiniges Projekt laufen lasse, dann funktioniert es auch, aber nicht wenn ich versuche es in bestehendes Programm zu integrieren ).
Jetzt ist das Problem, dass ich die Klasse über einen Button starten will.
Die App mit dem Button ist dabei auch schon fertig und läuft, wenn man jetzt den Button drückt bekomme ich aber stets folgenden Fehler:

1FATAL EXCEPTION: main
2java.lang.NoClassDefFoundError: com.google.android.gms.R$styleable
3 at com.google.android.gms.maps.GoogleMapOptions.createFromAttributes(Unknown Source)
4 at com.google.android.gms.maps.SupportMapFragment.onInflate(Unknown Source)
5 at android.support.v4.app.FragmentActivity.onCreateView(FragmentActivity.java:284)
6 at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:676)
7 at android.view.LayoutInflater.rInflate(LayoutInflater.java:746)
8 at android.view.LayoutInflater.inflate(LayoutInflater.java:489)
9 at android.view.LayoutInflater.inflate(LayoutInflater.java:396)
10 at android.view.LayoutInflater.inflate(LayoutInflater.java:352)
11 at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:270)
12 at android.app.Activity.setContentView(Activity.java:1881)
13 at com.example.parkschein.MainActivity.onCreate(MainActivity.java:27)
14 at android.app.Activity.performCreate(Activity.java:5104)
15 at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080)
16 at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144)
17 at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230)
18 at android.app.ActivityThread.access$600(ActivityThread.java:141)
19 at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234)
20 at android.os.Handler.dispatchMessage(Handler.java:99)
21 at android.os.Looper.loop(Looper.java:137)
22 at android.app.ActivityThread.main(ActivityThread.java:5041)
23 at java.lang.reflect.Method.invokeNative(Native Method)
24 at java.lang.reflect.Method.invoke(Method.java:511)
25 at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
26 at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)

Leider hat mir hierbei das Internet auch nicht viel weitergeholfen, wenn mir einer von Euch vll. helfen könnte, was ich falsch mache?

Danke Euch vielmals schon im vorhinein.

Hier meine Klasse und sonstiges

Erste Klasse ( Parkschein ):
gekürzt:
1buttonGoogle.setOnClickListener(new Button.OnClickListener(){
2 @Override
3 public void onClick(View arg0) {
4 // TODO Auto-generated method stub
5 Intent myIntent = new Intent(Parkschein.this, MainActivity.class);
6 startActivity(myIntent);
7
8 }});
9 }

Dazu dann das Manifest.xml

1<?xml version="1.0" encoding="utf-8"?>
2<manifest xmlns:android=""
3 package="com.example.parkschein"
4 android:versionCode="1"
5 android:versionName="1.0" >
6
7 <uses-sdk
8 android:minSdkVersion="8"
9 android:targetSdkVersion="17" />
10 <permission
11 android:name="com.example.parkschein.permission.MAPS_RECEIVE"
12 android:protectionLevel="signature"/>
13 <uses-permission android:name="com.example.parkschein.permission.MAPS_RECEIVE"/>
14 <uses-permission android:name="android.permission.SEND_SMS" />
15 <uses-permission android:name="android.permission.RECEIVE_SMS" />
16 <uses-permission android:name="android.permission.INTERNET"/>
17 <uses-permission android:name="android.permission.READ_CONTACTS"/>
18 <uses-permission android:name="android.permission.INTERNET" />
19 <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
20 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
21 <uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" />
22 <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
23 <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
24 <uses-feature
25 android:glEsVersion="0x00020000"
26 android:required="true"/>
27
28 <application
29 android:allowBackup="true"
30 android:icon="@drawable/ic_launcher"
31 android:label="@string/app_name"
32 android:theme="@style/AppTheme" >
33 <activity android:name=".MainActivity"></activity>
34 <activity
35 android:name="com.example.parkschein.Parkschein"
36 android:label="@string/app_name" >
37 <intent-filter>
38 <action android:name="android.intent.action.MAIN" />
39
40 <category android:name="android.intent.category.LAUNCHER" />
41 </intent-filter>
42 </activity>
43 <service android:name="com.example.parkschein.MyAlarmService" />
44 <meta-data
45 android:name="com.google.android.maps.v2.API_KEY"
46 android:value="AIzaSyAs46gCJxUSsYjqfIRDEc5gB53Ng4tyaN8"/>
47 </application>
48</manifest>

Die zweite Klasse mit welcher Google Maps gestartet werden sollte:

1package com.example.parkschein;
2
3import android.app.Dialog;
4import android.location.Criteria;
5import android.location.Location;
6import android.location.LocationListener;
7import android.location.LocationManager;
8import android.os.Bundle;
9import android.support.v4.app.FragmentActivity;
10import android.view.Menu;
11import android.widget.TextView;
12
13import com.google.android.gms.common.ConnectionResult;
14import com.google.android.gms.common.GooglePlayServicesUtil;
15import com.google.android.gms.maps.CameraUpdateFactory;
16import com.google.android.gms.maps.GoogleMap;
17import com.google.android.gms.maps.SupportMapFragment;
18import com.google.android.gms.maps.model.LatLng;
19
20public class MainActivity extends FragmentActivity implements LocationListener {
21
22 GoogleMap googleMap;
23
24 @Override
25 protected void onCreate(Bundle savedInstanceState) {
26 super.onCreate(savedInstanceState);
27 setContentView(R.layout.activity_main);
28
29 // Getting Google Play availability status
30 int status = GooglePlayServicesUtil.isGooglePlayServicesAvailable(getBaseContext());
31
32 // Showing status
33 if(status!=ConnectionResult.SUCCESS){ // Google Play Services are not available
34
35 int requestCode = 10;
36 Dialog dialog = GooglePlayServicesUtil.getErrorDialog(status, this, requestCode);
37 dialog.show();
38
39 }else { // Google Play Services are available
40
41 // Getting reference to the SupportMapFragment of activity_main.xml
42 SupportMapFragment fm = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map);
43
44 // Getting GoogleMap object from the fragment
45 googleMap = fm.getMap();
46
47 // Enabling MyLocation Layer of Google Map
48 googleMap.setMyLocationEnabled(true);
49
50
51 // Getting LocationManager object from System Service LOCATION_SERVICE
52 LocationManager locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
53
54 // Creating a criteria object to retrieve provider
55 Criteria criteria = new Criteria();
56
57 // Getting the name of the best provider
58 String provider = locationManager.getBestProvider(criteria, true);
59
60 // Getting Current Location
61 Location location = locationManager.getLastKnownLocation(provider);
62
63 if(location!=null){
64 onLocationChanged(location);
65 }
66
67 locationManager.requestLocationUpdates(provider, 20000, 0, this);
68 }
69
70 }
71
72
73 @Override
74 public void onLocationChanged(Location location) {
75
76 TextView tvLocation = (TextView) findViewById(R.id.tv_location);
77
78 // Getting latitude of the current location
79 double latitude = location.getLatitude();
80
81 // Getting longitude of the current location
82 double longitude = location.getLongitude();
83
84 // Creating a LatLng object for the current location
85 LatLng latLng = new LatLng(latitude, longitude);
86
87 // Showing the current location in Google Map
88 googleMap.moveCamera(CameraUpdateFactory.newLatLng(latLng));
89
90 // Zoom in the Google Map
91 googleMap.animateCamera(CameraUpdateFactory.zoomTo(15));
92
93
94 // Setting latitude and longitude in the TextView tv_location
95 tvLocation.setText("Latitude:" + latitude + ", Longitude:"+ longitude );
96
97 }
98
99 @Override
100 public void onProviderDisabled(String provider) {
101 // TODO Auto-generated method stub
102 }
103
104 @Override
105 public void onProviderEnabled(String provider) {
106 // TODO Auto-generated method stub
107 }
108
109 @Override
110 public void onStatusChanged(String provider, int status, Bundle extras) {
111 // TODO Auto-generated method stub
112 }
113
114 @Override
115 public boolean onCreateOptionsMenu(Menu menu) {
116 // Inflate the menu; this adds items to the action bar if it is present.
117 getMenuInflater().inflate(R.menu.activity_main, menu);
118 return true;
119 }
120}

Und auch hierzu das Layout, falls der Fehler hier liegen sollte:

1<RelativeLayout xmlns:android=""
2 xmlns:tools="
3 android:layout_width="match_parent"
4 android:layout_height="match_parent"
5 tools:context=".MainActivity" >
6
7 <TextView
8 android:id="@+id/tv_location"
9 android:layout_width="wrap_content"
10 android:layout_height="wrap_content"
11 />
12
13 <fragment
14 android:id="@+id/map"
15 android:layout_width="match_parent"
16 android:layout_height="match_parent"
17 android:layout_below="@id/tv_location"
18 class="com.google.android.gms.maps.SupportMapFragment"
19 />
20
21</RelativeLayout>

Antworten
Bernd Roth
  • Forum-Beiträge: 98

30.07.2013, 20:46:52 via Website

Hallo!

Ich antworte mir mal selber, da ich soeben das Problem gefunden habe.
Ich war zwar der Meinung, dass ich diesen Vorgang schon vorgenommen hätte, aber so kann man sich eben täuschen!

Folgendes haben ich vergessen vorzunehmen:

Ich habe vergessen die google-play-services_lib zum Projekt hinzuzufügen!

Antworten