如何使用android通过gps获取当前位置

时间:2015-12-28 08:04:08

标签: android android-layout android-intent

我正在尝试创建一个Android程序来获取位置 但不幸的是,它抛出异常,因为不幸的是APP停止了

你能建议我吗。代码如下

package com.example.ngo;
import java.io.IOException;  
import java.util.List;  
import java.util.Locale;  

import android.annotation.SuppressLint;
import android.app.Activity;  
import android.app.AlertDialog;  
import android.content.ContentResolver;  
import android.content.Context;  
import android.content.DialogInterface;  
import android.content.Intent;  
import android.content.pm.ActivityInfo;  
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.provider.Settings;  
import android.util.Log;  
import android.view.View;  
import android.view.View.OnClickListener;  
import android.widget.Button;  
import android.widget.EditText;  
import android.widget.ProgressBar;  
import android.widget.Toast;  

public class MainActivity extends Activity   
implements OnClickListener {  

 private LocationManager locationMangaer=null;  
 private LocationListener locationListener=null;   

 private Button btnGetLocation = null;  
 private EditText editLocation = null;   
 private ProgressBar pb =null;  

 private static final String TAG = "Debug";  
 private Boolean flag = false;  

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


  //if you want to lock screen for always Portrait mode    
  setRequestedOrientation(ActivityInfo  
  .SCREEN_ORIENTATION_PORTRAIT);  

  pb = (ProgressBar) findViewById(R.id.progressBar1);  
  pb.setVisibility(View.INVISIBLE);  

  editLocation = (EditText) findViewById(R.id.editTextLocation);   

  btnGetLocation = (Button) findViewById(R.id.btnLocation);  
  btnGetLocation.setOnClickListener(this);  

  locationMangaer = (LocationManager)   
  getSystemService(Context.LOCATION_SERVICE);  

 }  

 @Override  
 public void onClick(View v) {  
  flag = displayGpsStatus();  
  if (flag) {  

   Log.v(TAG, "onClick");    

   editLocation.setText("Please!! move your device to"+  
   " see the changes in coordinates."+"\nWait..");  

   pb.setVisibility(View.VISIBLE);  
   locationListener = new MyLocationListener();  

   locationMangaer.requestLocationUpdates(LocationManager  
   .GPS_PROVIDER, 5000, 10,locationListener);  

   } else {  
   alertbox("Gps Status!!", "Your GPS is: OFF");  
  }  

 }  

 /*----Method to Check GPS is enable or disable ----- */  
 @SuppressLint("NewApi") private Boolean displayGpsStatus() {  
  ContentResolver contentResolver = getBaseContext()  
  .getContentResolver();  
  boolean gpsStatus = Settings.Secure  
  .isLocationProviderEnabled(contentResolver,   
  LocationManager.GPS_PROVIDER);  
  if (gpsStatus) {  
   return true;  

  } else {  
   return false;  
  }  
 }  

 /*----------Method to create an AlertBox ------------- */  
 protected void alertbox(String title, String mymessage) {  
  AlertDialog.Builder builder = new AlertDialog.Builder(this);  
  builder.setMessage("Your Device's GPS is Disable")  
  .setCancelable(false)  
  .setTitle("** Gps Status **")  
  .setPositiveButton("Gps On",  
   new DialogInterface.OnClickListener() {  
   public void onClick(DialogInterface dialog, int id) {  
   // finish the current activity  
   // AlertBoxAdvance.this.finish();  
   Intent myIntent = new Intent(  
   Settings.ACTION_SECURITY_SETTINGS);  
   startActivity(myIntent);  
      dialog.cancel();  
   }  
   })  
   .setNegativeButton("Cancel",  
   new DialogInterface.OnClickListener() {  
   public void onClick(DialogInterface dialog, int id) {  
    // cancel the dialog box  
    dialog.cancel();  
    }  
   });  
  AlertDialog alert = builder.create();  
  alert.show();  
 }  

 /*----------Listener class to get coordinates ------------- */  
 private class MyLocationListener implements LocationListener {  
        @Override  
        public void onLocationChanged(Location loc) {  

            editLocation.setText("");  
            pb.setVisibility(View.INVISIBLE);  
            Toast.makeText(getBaseContext(),"Location changed : Lat: " +  
   loc.getLatitude()+ " Lng: " + loc.getLongitude(),  
   Toast.LENGTH_SHORT).show();  
            String longitude = "Longitude: " +loc.getLongitude();    
      Log.v(TAG, longitude);  
      String latitude = "Latitude: " +loc.getLatitude();  
      Log.v(TAG, latitude);  

    /*----------to get City-Name from coordinates ------------- */  
      String cityName=null;                
      Geocoder gcd = new Geocoder(getBaseContext(),   
   Locale.getDefault());               
      List<Address>  addresses;    
      try {    
      addresses = gcd.getFromLocation(loc.getLatitude(), loc  
   .getLongitude(), 1);    
      if (addresses.size() > 0)    
         System.out.println(addresses.get(0).getLocality());    
         cityName=addresses.get(0).getLocality();    
        } catch (IOException e) {              
        e.printStackTrace();    
      }   

      String s = longitude+"\n"+latitude +  
   "\n\nMy Currrent City is: "+cityName;  
           editLocation.setText(s);  
        }  

        @Override  
        public void onProviderDisabled(String provider) {  
            // TODO Auto-generated method stub           
        }  

        @Override  
        public void onProviderEnabled(String provider) {  
            // TODO Auto-generated method stub           
        }  

        @Override  
        public void onStatusChanged(String provider,   
  int status, Bundle extras) {  
            // TODO Auto-generated method stub           
        }  
    }  
}  

0 个答案:

没有答案