here,i want to first check that gps is enable or not and if gps is enable then show user location on google maps, checking gps enable or not working fine but it is not opening google map's class their is some problem in MainActivity class..and i have added google play service library..and both the jar file..google play and support v4 ...here is my code
在这里,我想首先检查gps是否启用,如果启用gps,那么在谷歌地图上显示用户位置,检查gps是否启用,但它没有打开谷歌地图的类,这是主活动类的问题。我还添加了谷歌游戏服务库。还有jar文件。谷歌播放和支持v4…这是我的代码
Gpsactivator.java
Gpsactivator.java
package com.example.googlemaps;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.location.LocationManager;
import android.os.AsyncTask;
import android.os.Bundle;
import android.provider.Settings;
import android.util.Log;
import android.widget.Toast;
import com.google.android.gms.maps.MapView;
import com.google.android.maps.MapController;
public class Gpsactivator extends Activity {
Boolean enable = false;
LocationManager locationManager;
int x = 0;
private MapView mapView;
private MapController mapController;
//Provider gpsprovider;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
String provider = Settings.Secure.getString(getContentResolver(), Settings.Secure.LOCATION_PROVIDERS_ALLOWED);
// gpsprovider=LocationManager.GPS_PROVIDER;
if (locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)){
Toast.makeText(this, "GPS is Enabled in your devide", Toast.LENGTH_SHORT).show();
startActivity(new Intent(this,MainActivity.class));
}else
{
showGPSDisabledAlertToUser();
new ultimate().execute("");
//Toast.makeText(this, "GPS is now Enabled in your devide", Toast.LENGTH_SHORT).show();
//
// ProgressDialog dialog = ProgressDialog.show(Gpsactivator.this, "", "Loading. Please wait...", true);
// while(!locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER))
// {
// Log.e("TAG",status.toString() );
// if (locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER))
// {
// startActivity(new Intent(this,MainActivity.class));
// // dialog.dismiss();
// break;
// }
// }
}
}
private void showGPSDisabledAlertToUser(){
// Toast.makeText(this, "Enabled your Gps and restart your app", Toast.LENGTH_SHORT).show();
AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(this);
alertDialogBuilder.setMessage("GPS is disabled in your device. Would you like to enable it?")
.setCancelable(false)
.setPositiveButton("Goto Settings Page To Enable GPS",
new DialogInterface.OnClickListener(){
public void onClick(DialogInterface dialog, int id){
Intent callGPSSettingIntent = new Intent(
android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS);
startActivity(callGPSSettingIntent);
}
}
);
alertDialogBuilder.setNegativeButton("Cancel",
new DialogInterface.OnClickListener(){
public void onClick(DialogInterface dialog, int id){
dialog.cancel();
}
});
AlertDialog alert = alertDialogBuilder.create();
alert.show();
}
private class ultimate extends AsyncTask<String,Void ,Integer> {
@Override
protected Integer doInBackground(String... params) {
// TODO Auto-generated method stub
Boolean status=locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
Log.e("TAAAG",status.toString()+"1" );
while(!locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER))
{
Log.e("TAG",status.toString() );
if (locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER))
{
startActivity(new Intent(Gpsactivator.this,MainActivity.class));
// dialog.dismiss();
break;
}
}
return null;
}
}
@Override
protected void onPause() {
// TODO Auto-generated method stub
super.onPause();
finish();
}
}
Mainactivity.java
Mainactivity.java
package com.example.googlemaps;
import java.io.IOException;
import java.util.List;
import java.util.Locale;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Point;
import android.location.Address;
import android.location.Geocoder;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.widget.Toast;
import com.google.android.maps.GeoPoint;
import com.google.android.maps.MapActivity;
import com.google.android.maps.MapController;
import com.google.android.maps.MapView;
import com.google.android.maps.Overlay;
//public class MainActivity extends FragmentActivity {
//
//
// private GoogleMap mMap;
//
//
// @Override
// protected void onCreate(Bundle savedInstanceState) {
// super.onCreate(savedInstanceState);
// setContentView(R.layout.activity_main);
//
// // mMap = ((MapFragment) getFragmentManager().findFragmentById(R.id.map)).getMap();
// setUpMapIfNeeded();
// }
// private void setUpMapIfNeeded() {
// // Do a null check to confirm that we have not already instantiated the map.
// if (mMap == null) {
// mMap = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map)).getMap();
// // Check if we were successful in obtaining the map.
// if (mMap != null) {
// // The Map is verified. It is now safe to manipulate the map.
//
// }
// }
// }
//}
public class MainActivity extends MapActivity {
private MapView mapView;
private MapController mapController;
private LocationManager locationManager;
private LocationListener locationListener;
@SuppressWarnings("deprecation")
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
locationListener = new GPSLocationListener();
locationManager.requestLocationUpdates(
LocationManager.GPS_PROVIDER,
0,
0,
locationListener);
mapView = (MapView) findViewById(R.id.mapView);
// enable Street view by default
mapView.setStreetView(true);
// enable to show Satellite view
// mapView.setSatellite(true);
// enable to show Traffic on map
// mapView.setTraffic(true);
mapView.setBuiltInZoomControls(true);
mapController = mapView.getController();
mapController.setZoom(16);
}
@Override
protected boolean isRouteDisplayed() {
return false;
}
private class GPSLocationListener implements LocationListener
{
@Override
public void onLocationChanged(Location location) {
if (location != null) {
GeoPoint point = new GeoPoint(
(int) (location.getLatitude() * 1E6),
(int) (location.getLongitude() * 1E6));
/* Toast.makeText(getBaseContext(),
"Latitude: " + location.getLatitude() +
" Longitude: " + location.getLongitude(),
Toast.LENGTH_SHORT).show();*/
mapController.animateTo(point);
mapController.setZoom(16);
// add marker
MapOverlay mapOverlay = new MapOverlay();
mapOverlay.setPointToDraw(point);
List<Overlay> listOfOverlays = mapView.getOverlays();
listOfOverlays.clear();
listOfOverlays.add(mapOverlay);
String address = ConvertPointToLocation(point);
Toast.makeText(getBaseContext(), address, Toast.LENGTH_SHORT).show();
mapView.invalidate();
}
}
public String ConvertPointToLocation(GeoPoint point) {
String address = "";
Geocoder geoCoder = new Geocoder(
getBaseContext(), Locale.getDefault());
try {
List<Address> addresses = geoCoder.getFromLocation(
point.getLatitudeE6() / 1E6,
point.getLongitudeE6() / 1E6, 1);
if (addresses.size() > 0) {
for (int index = 0; index < addresses.get(0).getMaxAddressLineIndex(); index++)
address += addresses.get(0).getAddressLine(index) + " ";
}
}
catch (IOException e) {
e.printStackTrace();
}
return address;
}
@Override
public void onProviderDisabled(String provider) {
}
@Override
public void onProviderEnabled(String provider) {
}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
}
}
class MapOverlay extends Overlay
{
private GeoPoint pointToDraw;
public void setPointToDraw(GeoPoint point) {
pointToDraw = point;
}
public GeoPoint getPointToDraw() {
return pointToDraw;
}
@Override
public boolean draw(Canvas canvas, MapView mapView, boolean shadow, long when) {
super.draw(canvas, mapView, shadow);
// convert point to pixels
Point screenPts = new Point();
mapView.getProjection().toPixels(pointToDraw, screenPts);
// add marker
Bitmap bmp = BitmapFactory.decodeResource(getResources(), R.drawable.red);
canvas.drawBitmap(bmp, screenPts.x, screenPts.y - 24, null); // 24 is the height of image
return true;
}
}
}
AndroidManifestfile.xml
AndroidManifestfile.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.googlemaps"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="17" />
<permission
android:name="com.example.googlemaps.MAPS_RECEIVE"
android:protectionLevel="signature" />
<uses-feature
android:glEsVersion="0x00020000"
android:required="true" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="com.example.googlemaps.MAPS_RECEIVE" />
<uses-permission android:name="android.permission.INTERNET" />
<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_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.example.googlemaps.Gpsactivator"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".MainActivity"
android:label="MainActivity"
>
</activity>
<uses-library android:name="com.google.android.maps" /> <meta-data
android:name="com.google.android.maps.v2.API_KEY"
android:value="AIzaSyCGqPvJLn_RSvl_eGZaHpYSG5MPbgLo8_4" />
</application>
</manifest>
MainActivity.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<com.google.android.maps.MapView
android:id="@+id/mapView"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:enabled="true"
android:clickable="true"
/>
</LinearLayout>
Log file
日志文件
07-26 17:20:18.145: W/dalvikvm(15108): Unable to resolve superclass of Lcom/example/googlemaps/MainActivity; (1197)
07-26 17:20:18.145: W/dalvikvm(15108): Link of class 'Lcom/example/googlemaps/MainActivity;' failed
07-26 17:20:18.145: E/dalvikvm(15108): Could not find class 'com.example.googlemaps.MainActivity', referenced from method com.example.googlemaps.Gpsactivator.onCreate
07-26 17:20:18.145: W/dalvikvm(15108): VFY: unable to resolve const-class 591 (Lcom/example/googlemaps/MainActivity;) in Lcom/example/googlemaps/Gpsactivator;
07-26 17:20:18.145: D/dalvikvm(15108): VFY: replacing opcode 0x1c at 0x0033
07-26 17:20:18.145: D/dalvikvm(15108): VFY: dead code 0x0035-003a in Lcom/example/googlemaps/Gpsactivator;.onCreate (Landroid/os/Bundle;)V
07-26 17:20:18.145: I/ApplicationPackageManager(15108): cscCountry is not German : INS
07-26 17:20:19.036: D/AndroidRuntime(15108): Shutting down VM
07-26 17:20:19.036: W/dalvikvm(15108): threadid=1: thread exiting with uncaught exception (group=0x40018578)
07-26 17:20:19.731: E/AndroidRuntime(15108): FATAL EXCEPTION: main
07-26 17:20:19.731: E/AndroidRuntime(15108): java.lang.NoClassDefFoundError: com.example.googlemaps.MainActivity
07-26 17:20:19.731: E/AndroidRuntime(15108): at com.example.googlemaps.Gpsactivator.onCreate(Gpsactivator.java:37)
07-26 17:20:19.731: E/AndroidRuntime(15108): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
07-26 17:20:19.731: E/AndroidRuntime(15108): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1615)
07-26 17:20:19.731: E/AndroidRuntime(15108): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1667)
07-26 17:20:19.731: E/AndroidRuntime(15108): at android.app.ActivityThread.access$1500(ActivityThread.java:117)
07-26 17:20:19.731: E/AndroidRuntime(15108): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:935)
07-26 17:20:19.731: E/AndroidRuntime(15108): at android.os.Handler.dispatchMessage(Handler.java:99)
07-26 17:20:19.731: E/AndroidRuntime(15108): at android.os.Looper.loop(Looper.java:130)
07-26 17:20:19.731: E/AndroidRuntime(15108): at android.app.ActivityThread.main(ActivityThread.java:3687)
07-26 17:20:19.731: E/AndroidRuntime(15108): at java.lang.reflect.Method.invokeNative(Native Method)
07-26 17:20:19.731: E/AndroidRuntime(15108): at java.lang.reflect.Method.invoke(Method.java:507)
07-26 17:20:19.731: E/AndroidRuntime(15108): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867)
07-26 17:20:19.731: E/AndroidRuntime(15108): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:625)
07-26 17:20:19.731: E/AndroidRuntime(15108): at dalvik.system.NativeStart.main(Native Method)
1 个解决方案
#1
0
Change
改变
public class MainActivity extends Activity
to
来
public class MainActivity extends FragmentActivity
#1
0
Change
改变
public class MainActivity extends Activity
to
来
public class MainActivity extends FragmentActivity