GPS返回0.0,0.0纬度和经度上的设备,但在仿真器正常工作 [英] GPS returning 0.0,0.0 as latitude and longitude on device,but working correctly on emulator
本文介绍了GPS返回0.0,0.0纬度和经度上的设备,但在仿真器正常工作的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我是新来的机器人。我能够从模拟器的GPS坐标,但得到0.0,0.0在我的设备经度和纬度。
这里是我的code。对不起它太长..
类GPSTracker.java
I am new to android. I am able to get the GPS co-ordinates from the emulator, but getting 0.0,0.0 as latitude and longitude in my device. here is my code. Sorry its too long.. class GPSTracker.java
package com.example.spotter;
public class GPSTracker extends Service implements LocationListener {
private final Context mContext;
// flag for GPS status
boolean isGPSEnabled = false;
// flag for network status
boolean isNetworkEnabled = false;
// flag for GPS status
boolean canGetLocation = false;
Location location; // location
double latitude; // latitude
double longitude; // longitude
double accuracy;
// The minimum distance to change Updates in meters
private static final long MIN_DISTANCE_CHANGE_FOR_UPDATES = 1; // 1 meter
// The minimum time between updates in milliseconds
private static final long MIN_TIME_BW_UPDATES = 1000 * 6 * 1; // 1 sec
// Declaring a Location Manager
protected LocationManager locationManager;
public GPSTracker(Context context) {
this.mContext = context;
getLocation();
}
public Location getLocation() {
try {
locationManager = (LocationManager) mContext
.getSystemService(LOCATION_SERVICE);
// getting GPS status
isGPSEnabled = locationManager
.isProviderEnabled(LocationManager.GPS_PROVIDER);
// getting network status
isNetworkEnabled = locationManager
.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
if (!isGPSEnabled && !isNetworkEnabled) {
// no network provider is enabled
} else {
this.canGetLocation = true;
// if GPS Enabled get lat/long using GPS Services
if (isGPSEnabled) {
if (location == null) {
locationManager.requestLocationUpdates(
LocationManager.GPS_PROVIDER,
MIN_TIME_BW_UPDATES,
MIN_DISTANCE_CHANGE_FOR_UPDATES, this);
Log.d("GPS Enabled", "GPS Enabled");
if (locationManager != null) {
location = locationManager
.getLastKnownLocation(LocationManager.GPS_PROVIDER);
if (location != null) {
latitude = location.getLatitude();
longitude = location.getLongitude();
Log.d("GPS Enabled", String.valueOf(latitude));
}
}
}
else{
if (isNetworkEnabled) {
locationManager.requestLocationUpdates(
LocationManager.NETWORK_PROVIDER,
MIN_TIME_BW_UPDATES,
MIN_DISTANCE_CHANGE_FOR_UPDATES, this);
Log.d("Network", "Network");
if (locationManager != null) {
location = locationManager
.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
if (location != null) {
latitude = location.getLatitude();
longitude = location.getLongitude();
}
}
}
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
return location;
}
public void stopUsingGPS(){
if(locationManager != null){
locationManager.removeUpdates(GPSTracker.this);
}
}
public double getLatitude(){
if(location != null){
latitude = location.getLatitude();
}
// return latitude
return latitude;
}
public double getLongitude(){
if(location != null){
longitude = location.getLongitude();
}
// return longitude
return longitude;
}
public double getAccuracy(){
if(location != null){
accuracy = location.getAccuracy();
}
return accuracy;
}
public boolean canGetLocation() {
return this.canGetLocation;
}
public void showSettingsAlert(){
AlertDialog.Builder alertDialog = new AlertDialog.Builder(mContext);
// Setting Dialog Title
alertDialog.setTitle("GPS is settings");
// Setting Dialog Message
alertDialog.setMessage("GPS is not enabled. Do you want to go to settings menu?");
// On pressing Settings button
alertDialog.setPositiveButton("Settings", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,int which) {
Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
mContext.startActivity(intent);
}
});
// on pressing cancel button
alertDialog.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
}
});
// Showing Alert Message
alertDialog.show();
}
@Override
public void onLocationChanged(Location location) {
Log.d("spt", "in loc changed");
/*if (MainService.loststatus > 0) {
HttpPost httpPost = new HttpPost(
"http://spotter.orgfree.com/writegps.php?value="
+ String.valueOf(this.getLatitude()) + ","
+ String.valueOf(this.getLongitude()));
// output is the variable you used in your program
try {
DefaultHttpClient httpClient = new DefaultHttpClient();
httpClient.execute(httpPost);
Log.d("spt", "writing coord to file");
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//Toast.makeText(this, String.valueOf(gps.getLatitude()) + String.valueOf(gps.getLatitude()),
// Toast.LENGTH_SHORT).show();
}*/
}
@Override
public void onProviderDisabled(String provider) {
}
@Override
public void onProviderEnabled(String provider) {
}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
}
@Override
public IBinder onBind(Intent arg0) {
return null;
}
}
和MainService.java
and MainService.java
package com.example.spotter;
public class MainService extends Service implements Runnable {
String str;
Intent i1;
static double loststatus = 0;
Thread t;
//double longi,lati;
String provider;
Location location;
Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
Intent i = new Intent();
i.setClass(getApplicationContext(), Locked.class);
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(i);
Log.d("spt", "in handler");
}
};
@Override
public IBinder onBind(Intent arg0) {
return null;
}
@Override
public void onCreate() {
super.onCreate();
}
@Override
public void onDestroy() {
Toast.makeText(this, "Service Stopped", Toast.LENGTH_SHORT).show();
super.onDestroy();
stopService(new Intent(getBaseContext(), MainService.class));
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Toast.makeText(this, "Spotter tracking service has been activated.", Toast.LENGTH_SHORT).show();
Notification note=new Notification(R.drawable.ic_launcher,
"",
System.currentTimeMillis());
Intent i=new Intent(this, MainActivity.class);
i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP|
Intent.FLAG_ACTIVITY_SINGLE_TOP);
PendingIntent pi=PendingIntent.getActivity(this, 0,
i, 0);
note.setLatestEventInfo(this, "",
"",
pi);
note.flags|=Notification.FLAG_NO_CLEAR;
t = new Thread(this);
t.start();
startForeground(1337, note);
return START_STICKY;
}
public void run() {
Looper.prepare();
while (isMyServiceRunning()) {
try {
Thread.sleep(30000);
} catch (InterruptedException e) {
e.printStackTrace();
}
try {
Log.d("spt", "read status started");
if ((Connectivity.isConnected(getApplicationContext()))) {
URL urlreadstatus = new URL("http://abc.xyz.com/status.txt");
// Log.d("spt",String.valueOf(URLUtil.isValidUrl("http://abc.xyz.com/status.txt")));
BufferedReader in = new BufferedReader( new InputStreamReader(urlreadstatus.openStream()));
str = in.readLine();
if(!str.equals(null)){
Log.d("spt", str);
}
in.close();
Log.d("spt", "read status complete");
} else {
Log.d("spt", "not connected");
break;
}
} catch (MalformedURLException e1) {
e1.printStackTrace();
} catch (IOException e) {
Log.d("spt", "IO exception");
str = "11";
e.printStackTrace();
} catch(NullPointerException e){
str="11";
}
if (str.equals(null)) {
str = "11";
}
if (str.length() == 1) {
loststatus++;
if(loststatus %10 ==0){
SendSms s= new SendSms();
Log.d("spt", "ghus gaye");
TelephonyManager telemamanger = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
String getSimSerialNumber = telemamanger.getSimSerialNumber();
String getSimNumber = telemamanger.getLine1Number();
String no="15555215557";
if (getSimNumber != no)
{
//Log.d("spt", getSimNumber);
Log.d("spt", "ghus gaye dobara");
sendSMS();
}
}
GPSTracker gps=new GPSTracker(MainService.this);
Log.d("spt", "lost status1 requesting location updates");
Toast.makeText(this, String.valueOf(gps.getLatitude()) + String.valueOf(gps.getLatitude()),
Toast.LENGTH_SHORT).show();
if(loststatus==1){
handler.sendEmptyMessage(0);
}
if (loststatus > 0) {
HttpPost httpPost = new HttpPost(
"http://abc.xyz.com/writegps.php?value="
+ String.valueOf(gps.getLatitude()) + ","
+ String.valueOf(gps.getLongitude()));
HttpPost httpPost2 = new HttpPost(
"http://abc.xyz.com/writeaccuracy.php?value="
+ String.valueOf(gps.getAccuracy()));
// output is the variable you used in your program
try {
DefaultHttpClient httpClient = new DefaultHttpClient();
httpClient.execute(httpPost);
httpClient.execute(httpPost2);
Log.d("spt", "writing coord to file");
//gps.stopUsingGPS();
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
} else {
loststatus = 0;
}
}
}
private boolean isMyServiceRunning() {
ActivityManager manager = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
for (RunningServiceInfo service : manager
.getRunningServices(Integer.MAX_VALUE)) {
if ("com.example.spotter.MainService".equals(service.service
.getClassName())) {
return true;
}
}
return false;
}
public void sendSMS() {
String phoneNumber = "15555215556";
GPSTracker gps=new GPSTracker(MainService.this);
String message =String.valueOf(gps.getLatitude())+","+String.valueOf(gps.getLongitude());
Log.d("spt", "in send sms");
// SmsManager smsManager = SmsManager.getDefault();
//smsManager.sendTextMessage(phoneNumber, null, message, null, null);
}
}
请帮忙。
推荐答案
您在你的code几个逻辑题
You have several logic problems in your code
- 在
如果(isGPSEnabled)
,你首先询问当前位置,然后检查是否所有旧的位置是present。同样是在的情况下,如果(isNetworkEnabled)
。 - 请求新的位置需要一定的时间几秒钟到20分钟。因此,所有的进一步措施应
onLocationChanged()
您已经空做。 - 既然你也问老位置,机会是,不知怎的,一个老位置轴承 0.0.0.0 在某处存储设备这是给你假的价值上。
- 另外你还没有,如果你所要求的使用GPS正常所需的权限规定。
- In
if (isGPSEnabled)
, you are first asking for a current location and then checking if any old location is present. Same is the case inif (isNetworkEnabled)
. - Request for a new location takes some time few seconds to 20 minutes. So all the further steps should done in
onLocationChanged()
which you have left empty. - Since you are also asking for old location, chances are that somehow an old location bearing 0.0.0.0 is stored somewhere on your device which is giving you the false value.
- Also you have not specified if you are asking for the required permission for using GPS properly.
更新: -
至于说通过OP的问题是没有一个明确的细胞接收。一旦在晴朗的天空,他得到了正确的GPS数据。
update :- As told by OP the problem was not a clear cell reception. Once under clear sky, he got correct GPS readings.
这篇关于GPS返回0.0,0.0纬度和经度上的设备,但在仿真器正常工作的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文