要获取Android应用程序当前的纬度和经度 [英] To get the Current latitude and longtitude in android Application
本文介绍了要获取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 =http://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);
}
}} ........
也可以检查位置的Android 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屋!
查看全文