要获取Android应用程序当前的纬度和经度 [英] To get the Current latitude and longtitude in android Application

查看:124
本文介绍了要获取Android应用程序当前的纬度和经度的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

您好我试图让纬度和经度,而无需使用 onLocationChanged ,通过以下链接。但我得到未知Error.Why这个错误发生?的find当前位置的经度和纬度

 进口java.sql.Date;
       进口值java.sql.SQLException;
    进口java.text.SimpleDateFormat的;
      进口java.util.Timer中;
           进口java.util.TimerTask中;         进口org.ksoap2.SoapEnvelope;
            进口org.ksoap2.serialization.SoapObject;
          进口org.ksoap2.serialization.SoapPrimitive;
      进口org.ksoap2.serialization.SoapSerializationEnvelope;
            进口org.ksoap2.transport.HttpTransportSE;            进口android.app.Activity;
         进口android.app.AlertDialog;
         进口android.content.BroadcastReceiver;
               进口android.content.Context;
          进口android.content.DialogInterface;
               进口android.content.Intent;
       进口android.content.IntentFilter;
          进口android.database.Cursor;
           进口android.location.Criteria;
               进口android.location.Location;
              进口android.location.LocationListener;
               进口android.location.LocationManager;
         进口android.net.ConnectivityManager;
           进口android.net.NetworkInfo;
            进口android.os.Bundle;
          进口android.telephony.TelephonyManager;
         进口android.util.Log;
      进口android.widget.TextView;
       进口android.widget.Toast;  公共类MainActivity扩展活动实现LocationListener的{
最后DBAdapter1 DB =新DBAdapter1(本);
    私人ConnectivityReceiver接收器= NULL;
    私人TextView的txtNetworkInfo;
    私有静态的TextView latituteField;
    私有静态的TextView longitudeField;
    私人的LocationManager的LocationManager;
    SoapSerializationEnvelope信封=新SoapSerializationEnvelope(SoapEnvelope.VER11);
      私有静态最后弦乐HostUrl =HTTP://yyy/Service.svc
     //私有静态最后弦乐HostUrl =HTTP://xxxx/Service.svc
      私有静态最后弦乐NAMESPACE =htt​​p://tempuri.org/;
      私人HttpTransportSE httpTransport =新HttpTransportSE(HostUrl);
    私人字符串供应商;
    私人SoapObject请求= NULL;
    私有静态最后长MINIMUM_DISTANCE_CHANGE_FOR_UPDATES = 1; //在米
    私有静态最后长MINIMUM_TIME_BETWEEN_UPDATES = 1800000; //(毫秒)
    字符串str;
    字符串STR2;
@覆盖
公共无效的onCreate(捆绑savedInstanceState){
    super.onCreate(savedInstanceState);
    的setContentView(R.layout.main);
    latituteField =(的TextView)findViewById(R.id.TextView02);
    longitudeField =(的TextView)findViewById(R.id.TextView04);
    的LocationManager =(的LocationManager)getSystemService(Context.LOCATION_SERVICE);
    //定义标准如何选择locatioin提供商 - >使用
    //默认
    标准标准=新标准();
    Log.i(ConnTest,locationManager.toString());
供应商= locationManager.getBestProvider(标准,FALSE);
地点= locationManager.getLastKnownLocation(供应商);//初始化位置字段
如果(位置!= NULL){
    的System.out.println(提供者+提供商+已被选择。);
    浮动纬度=(浮点)(location.getLatitude());
    浮动液化天然气=(浮点)(location.getLongitude());
    latituteField.setText(将String.valueOf(LAT));
    longitudeField.setText(将String.valueOf(LNG));
    最后一个双=(INT)(location.getLatitude()* 1E6);
 最终双B =(INT)(location.getLongitude()* 1E6);
海峡= Double.toString(一);
STR2 = Double.toString(B);}其他{
    latituteField.setText(提供者不可用);
    longitudeField.setText(提供者不可用);
}    txtNetworkInfo =(的TextView)findViewById(R.id.txtNetworkInfo);    接收器=新ConnectivityReceiver();            registerReceiver(接收器,新的IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION));
}
@覆盖
保护无效onResume(){
    super.onResume();
    //locationManager.requestLocationUpdates(provider,1000,1,本);
    locationManager.requestLocationUpdates(
            供应商,
            MINIMUM_TIME_BETWEEN_UPDATES,
            MINIMUM_DISTANCE_CHANGE_FOR_UPDATES,
            这个
    );
}/ *删除LocationListener的更新时,活动暂停* /
@覆盖
保护无效的onPause(){
    super.onPause();
    locationManager.removeUpdates(本);
}@覆盖
公共无效onLocationChanged(地点){
    // TODO自动生成方法存根
    浮动纬度=(浮点)(location.getLatitude());
    浮动液化天然气=(浮点)(location.getLongitude());
    longitudeField.setText(将String.valueOf(LNG));
    latituteField.setText(将String.valueOf(LAT));        Log.e(344444444444,STR);
        Toast.makeText(getBaseContext(),
                纬度:+ STR,                Toast.LENGTH_SHORT).show();
     尝试{
            db.open();
        }赶上(的SQLException E){
            // TODO自动生成catch块
            e.printStackTrace();
        }
         长ID = db.insert(latituteField.getText()的toString(),longitudeField.getText()的toString());
            如果(ID→1)
                {
                Toast.makeText(getBaseContext(),一个记录被插入,Toast.LENGTH_LONG).show();
                }
            其他
            {
                Toast.makeText(getBaseContext(),未插入,Toast.LENGTH_LONG).show();            }}@覆盖
公共无效onProviderDisabled(字符串提供商){
    // TODO自动生成方法存根}@覆盖
公共无效onProviderEnabled(字符串提供商){
    // TODO自动生成方法存根
    Toast.makeText(这一点,已启用新的供应商+供应商,
            Toast.LENGTH_SHORT).show();}@覆盖
公共无效onStatusChanged(字符串提供商,INT地位,捆绑演员){
    // TODO自动生成方法存根
    Toast.makeText(这一点,没有开启提供商+供应商,
            Toast.LENGTH_SHORT).show();}
保护无效显示(光标C){
    Toast.makeText(这一点,ROWID:+ c.getString(0)+\\ n+
     纬度:+ c.getString(1)+\\ n+经度:+ c.getString(2)+\\ n+
     Toast.LENGTH_LONG,0).show();
}@覆盖
    保护无效的onDestroy(){
            unregisterReceiver(接收机);            super.onDestroy();
    }私人字符串getNetworkStateString(NetworkInfo.State状态){
    字符串stateString =未知;    开关(州)
    {
            案有关:stateString =已连接;打破;
            案件正在连接:stateString =正在连接;打破;
            案例DISCONNECTED:stateString =断开连接;打破;
            案例DISCONNECTING:stateString =断开;打破;
            案例暂停:stateString =暂停;打破;
            默认:stateString =未知;打破;
    }    返回stateString;
}    私有类ConnectivityReceiver扩展广播接收器{            私人定时器mTimer;
            私人的TimerTask mTimerTask;            @覆盖
            公共无效的onReceive(上下文的背景下,意图意图){
                    的NetworkInfo信息= intent.getParcelableExtra(ConnectivityManager.EXTRA_NETWORK_INFO);                    如果(NULL!=资讯)
                    {
                            字符串状态= getNetworkStateString(info.getState());
                            如果(state.equals(已连接)){
                                mTimer =新的Timer();
                                mTimerTask =新的TimerTask(){
                                    @覆盖
                                    公共无效的run(){
                                        MainActivity.this.runOnUiThread(新的Runnable(){                                            @覆盖
                                            公共无效的run(){                                                //Toast.makeText(getBaseContext(),没有开启提供商+供应商,
                                                        /// Toast.LENGTH_SHORT).show();
                                                结果();
                                            }
                                        });                                   }
                                };
                                mTimer.scheduleAtFixedRate(mTimerTask,180000,180000);
                            }
                            }
            }
                    }    私人无效的结果(){
        SoapPrimitive响应=无效;
         最后弦乐方法名=InsertAllGPSInformation;
            请求=新SoapObject空间(namespace,方法名);
            envelope.dotNet = TRUE;
            TelephonyManager telephonyManager =(TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);
            串getImeNumber = telephonyManager.getDeviceId();
            SimpleDateFormat的sdfDateTime =新的SimpleDateFormat(YYYY-MM-DD HH:MM:SS);
            字符串NEWTIME = sdfDateTime.format(新的Date(System.currentTimeMillis的()));
            request.addProperty(IMEINumber,0);
            request.addProperty(经度,STR);
            request.addProperty(纵横,STR2);
            request.addProperty(日期,NEWTIME);            envelope.setOutputSoapObject(请求);
             字符串结果= NULL;
            尝试
             {
                httpTransport.call空间(namespace +IService /+方法名,信封);
                响应=(SoapPrimitive)envelope.getResponse();
                结果= response.toString();
             }
            赶上(例外五)
             {
                Toast.makeText(getBaseContext(),你的净连接或未登录网+,Toast.LENGTH_LONG).show();
                Log.e(上传图片错误:e.getMessage());
             }
            如果(result.equals(成功保存)){
            Toast.makeText(getBaseContext(),+导致,Toast.LENGTH_LONG).show();
            }
    }    }


解决方案

与Android,它实际上是pretty容易,以获得从GPS服务的位置。使用的LocationManager 最简单的方法来做到这一点。

 的LocationManager =(的LocationManager)getSystemService(Context.LOCATION_SERVICE);customLocationListener =新CustomLocationListener();locationManager.requestLocationUpdates(
        LocationManager.GPS_PROVIDER,
        0,
        0,
        二);

....一个Spagehtti code GOES HERE .....

 类CustomLocationListener实现LocationListener的{............
      公共无效onLocationChanged(位置argLocation){
         如果(位置!= NULL){
        INT纬度=(INT)(argLocation.getLatitude()* 1E6);
        INT经度=(INT)(argLocation.getLongitude()* 1E6);
              }
       }} ........

也可以检查位置的Andr​​oid API和的 Android的发展

Hi i tried to get the latitude and longtitude without using onLocationChanged ,by following this link .But i got UnKnown Error.Why this error Occur?find current location latitude and longitude

           import java.sql.Date;
       import java.sql.SQLException;
    import java.text.SimpleDateFormat;
      import java.util.Timer;
           import java.util.TimerTask;

         import org.ksoap2.SoapEnvelope;
            import org.ksoap2.serialization.SoapObject;
          import org.ksoap2.serialization.SoapPrimitive;
      import org.ksoap2.serialization.SoapSerializationEnvelope;
            import org.ksoap2.transport.HttpTransportSE;

            import android.app.Activity;
         import android.app.AlertDialog;
         import android.content.BroadcastReceiver;
               import android.content.Context;
          import android.content.DialogInterface;
               import android.content.Intent;
       import android.content.IntentFilter;
          import android.database.Cursor;
           import android.location.Criteria;
               import android.location.Location;
              import android.location.LocationListener;
               import android.location.LocationManager;
         import android.net.ConnectivityManager;
           import android.net.NetworkInfo;
            import android.os.Bundle;
          import android.telephony.TelephonyManager;
         import android.util.Log;
      import android.widget.TextView;
       import android.widget.Toast;

  public class MainActivity extends Activity implements LocationListener {
final DBAdapter1 db=new DBAdapter1(this);
    private ConnectivityReceiver receiver = null;
    private TextView txtNetworkInfo ;
    private static TextView latituteField;
    private static TextView longitudeField;
    private LocationManager locationManager;
    SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
      private static final String HostUrl =" http://yyy/Service.svc";
     // private static final String HostUrl ="  http://xxxx/Service.svc";
      private static final String NAMESPACE = "http://tempuri.org/";
      private HttpTransportSE httpTransport = new HttpTransportSE(HostUrl);
    private String provider;
    private SoapObject request=null;
    private static final long MINIMUM_DISTANCE_CHANGE_FOR_UPDATES = 1; // in Meters
    private static final long MINIMUM_TIME_BETWEEN_UPDATES = 1800000; // in Milliseconds
    String str;
    String str2;
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    latituteField = (TextView) findViewById(R.id.TextView02);
    longitudeField = (TextView) findViewById(R.id.TextView04);
    locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
    // Define the criteria how to select the locatioin provider -> use
    // default
    Criteria criteria = new Criteria();
    Log.i("ConnTest",locationManager.toString());
provider = locationManager.getBestProvider(criteria, false);
Location location = locationManager.getLastKnownLocation(provider);

// Initialize the location fields
if (location != null) {
    System.out.println("Provider " + provider + " has been selected.");
    float lat = (float) (location.getLatitude());
    float lng = (float) (location.getLongitude());
    latituteField.setText(String.valueOf(lat));
    longitudeField.setText(String.valueOf(lng));
    final   double  a=(int) (location.getLatitude() * 1E6);
 final  double  b=(int) (location.getLongitude() * 1E6);
str = Double.toString(a);
str2=Double.toString(b);

} else {
    latituteField.setText("provider not available");
    longitudeField.setText("provider not available");
}

    txtNetworkInfo = (TextView)findViewById(R.id.txtNetworkInfo);

    receiver = new ConnectivityReceiver();

            registerReceiver(receiver,new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION));


}
@Override
protected void onResume() {
    super.onResume();
    //locationManager.requestLocationUpdates(provider,1000, 1, this);
    locationManager.requestLocationUpdates(
            provider, 
            MINIMUM_TIME_BETWEEN_UPDATES, 
            MINIMUM_DISTANCE_CHANGE_FOR_UPDATES,
            this
    );
}

/* Remove the locationlistener updates when Activity is paused */
@Override
protected void onPause() {
    super.onPause();
    locationManager.removeUpdates(this);
}

@Override
public void onLocationChanged(Location location) {
    // TODO Auto-generated method stub
    float lat = (float) (location.getLatitude());
    float lng = (float) (location.getLongitude());
    longitudeField.setText(String.valueOf(lng));
    latituteField.setText(String.valueOf(lat));

        Log.e("344444444444:",str);
        Toast.makeText(getBaseContext(), 
                "Latitude: " + str,

                Toast.LENGTH_SHORT).show();
     try {
            db.open();
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
         long id=db.insert(latituteField.getText().toString(),longitudeField.getText().toString());
            if(id>1)
                {
                Toast.makeText(getBaseContext(),"one record is inserted",Toast.LENGTH_LONG).show();
                }
            else
            {
                Toast.makeText(getBaseContext(),"not inserted",Toast.LENGTH_LONG).show();

            }

}

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

}

@Override
public void onProviderEnabled(String provider) {
    // TODO Auto-generated method stub
    Toast.makeText(this, "Enabled new provider " + provider,
            Toast.LENGTH_SHORT).show();

}

@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
    // TODO Auto-generated method stub
    Toast.makeText(this, "Disenabled provider " + provider,
            Toast.LENGTH_SHORT).show();

}
protected void Display(Cursor c) {
    Toast.makeText(this, "rowid: " + c.getString(0) + "\n" +
     "Latitude: " + c.getString(1) + "\n" + "Longitude: " + c.getString(2) + "\n" +
     Toast.LENGTH_LONG, 0).show();    
}

@Override
    protected void onDestroy() {
            unregisterReceiver(receiver);

            super.onDestroy();
    }

private String getNetworkStateString(NetworkInfo.State state){
    String stateString = "Unknown";

    switch(state)
    {
            case CONNECTED:         stateString = "Connected";              break;
            case CONNECTING:        stateString = "Connecting";     break;
            case DISCONNECTED:      stateString = "Disconnected";   break;
            case DISCONNECTING:     stateString = "Disconnecting";  break;
            case SUSPENDED:         stateString = "Suspended";              break;
            default:                        stateString = "Unknown";                break;
    }

    return stateString;
}

    private class ConnectivityReceiver extends BroadcastReceiver{

            private Timer mTimer;
            private TimerTask mTimerTask;

            @Override
            public void onReceive(Context context, Intent intent) {
                    NetworkInfo info = intent.getParcelableExtra(ConnectivityManager.EXTRA_NETWORK_INFO);

                    if(null != info)
                    {
                            String state = getNetworkStateString(info.getState());
                            if(state.equals("Connected")){
                                mTimer = new Timer();
                                mTimerTask = new TimerTask() {
                                    @Override
                                    public void run() {
                                        MainActivity.this.runOnUiThread(new Runnable() {

                                            @Override
                                            public void run() {

                                                //Toast.makeText(getBaseContext(), "Disenabled provider " + provider,
                                                        ///Toast.LENGTH_SHORT).show();  
                                                result();
                                            }
                                        });

                                   }
                                };
                                mTimer.scheduleAtFixedRate(mTimerTask,180000,180000);
                            }


                            }
            }   
                    }

    private void result() {
        SoapPrimitive response=null;
         final String methodname="InsertAllGPSInformation";
            request = new SoapObject(NAMESPACE,methodname);
            envelope.dotNet = true;
            TelephonyManager telephonyManager = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);
            String getImeNumber=telephonyManager.getDeviceId();
            SimpleDateFormat sdfDateTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            String newtime =  sdfDateTime.format(new Date(System.currentTimeMillis()));
            request.addProperty("IMEINumber","0");
            request.addProperty("Longitude",str); 
            request.addProperty("Latitude",str2); 
            request.addProperty("Date",newtime);

            envelope.setOutputSoapObject(request);
             String result = null;
            try
             {          
                httpTransport.call(NAMESPACE+"IService/"+methodname, envelope);
                response = ( SoapPrimitive )envelope.getResponse();
                result=response.toString();
             }
            catch(Exception e)
             {
                Toast.makeText(getBaseContext(), "Your Net Connected or Not Login to Net"+"", Toast.LENGTH_LONG).show();
                Log.e("Upload Picture Error:",e.getMessage());
             }
            if(result.equals("Saved Successfully")){
            Toast.makeText(getBaseContext(), ""+result, Toast.LENGTH_LONG).show();
            }
    }

    }

解决方案

With android it is actually pretty easy in order to get the location from the GPS Service. Use the LocationManager the easiest way to do it

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

customLocationListener = new CustomLocationListener();

locationManager.requestLocationUpdates(
        LocationManager.GPS_PROVIDER,
        0,
        0,
        ll);

....A Spagehtti CODE GOES HERE.....

class CustomLocationListener implements LocationListener{ ............
      public void onLocationChanged(Location argLocation) { 
         if(location != null) {     
        int latitude=(int)(argLocation.getLatitude()*1E6);
        int longitude=(int)(argLocation.getLongitude()*1E6);
              }
       } ........ }

might also check Location Android API and Android Development

这篇关于要获取Android应用程序当前的纬度和经度的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆