[英]GPS Android - Cannot retrieve location on actual phone but works on emulator
I cannot the get the latitude and longitude of my phone when testing it on an actual phone or device, it always return null values, but when I test it on the emulator and send coordinates using DDMS, it succesfully returns the lat and long. 在实际的电话或设备上测试手机时,无法获得其纬度和经度,它始终返回空值,但是在模拟器上进行测试并使用DDMS发送坐标时,它成功返回了经纬度。
Here is my class: 这是我的课:
package locateodroid.james;
import java.io.IOException;
import java.util.List;
import java.util.Locale;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.location.Address;
import android.location.Criteria;
import android.location.Geocoder;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.telephony.SmsManager;
import android.telephony.SmsMessage;
import android.widget.EditText;
import android.widget.Toast;
public class SMSReceiver extends BroadcastReceiver{
public SharedPreferences prefs;
private String Keywords = "prefmode";
private Double lat;
private Double lon;
private static final String FAR_MODE_KEY = "farmode";
private Context con;
@Override
public void onReceive(Context context, Intent intent) {
con = context;
String FarModeKeyword= "";
String message = "";
String number = "";
prefs = context.getSharedPreferences(Keywords, Context.MODE_PRIVATE);
FarModeKeyword = prefs.getString(FAR_MODE_KEY, "");
//---get the SMS message passed in---
Bundle bundle = intent.getExtras();
SmsMessage[] msgs = null;
if (bundle != null)
{
//---retrieve the SMS message received---
Object[] pdus = (Object[]) bundle.get("pdus");
msgs = new SmsMessage[pdus.length];
for (int i=0; i<msgs.length; i++)
{
msgs[i] = SmsMessage.createFromPdu((byte[])pdus[i]);
message += msgs[i].getMessageBody().toString();
}
for (int i=0; i<msgs.length; i++)
{
msgs[i] = SmsMessage.createFromPdu((byte[])pdus[i]);
number += msgs[i].getOriginatingAddress();
}
}
getLocation();
Toast.makeText(context,
lat + "_" + lon,
Toast.LENGTH_SHORT).show();
sendSMS(number, lat + "_" + lon);
}
private void sendSMS(String phoneNumber, String message)
{
SmsManager sms = SmsManager.getDefault();
sms.sendTextMessage(phoneNumber, null, message, null, null);
}
private getLocation ()
{
// Get the location manager
LocationManager locationManager = (LocationManager)con.getSystemService(Context.LOCATION_SERVICE);
Criteria criteria = new Criteria ();
Geocoder geoCoder = new Geocoder(con);
LocationListener MyLocListener = new LocListener();
List<String> providers = locationManager.getProviders(true);
for (String provider : providers) {
locationManager.requestLocationUpdates(provider, 0, 0, MyLocListener);
}
Location location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
lat = location.getLatitude();
lon = location.getLongitude();
}
public class LocListener implements LocationListener
{
@Override
public void onLocationChanged(Location loc) {
lat = loc.getLatitude();
lon = loc.getLongitude();
}
@Override
public void onProviderDisabled(String arg0) {
// 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
}
}
}
Thanks in advance! 提前致谢!
did you give all permission in manifest to get GPS co ordinate ? 您是否在清单中授予了所有获得GPS坐标的权限? have you check whether the option of "USE GPS Settelite" in your phone is already selected or not ? 您是否检查过手机中的“使用GPS Settelite”选项? Have You try getting data outside the building because GPS will not get a fix inside building. 您是否尝试过在建筑物外获取数据,因为GPS无法在建筑物内得到修复。
If answer of all these questions is no. 如果所有这些问题的答案都是“否”。 than please do that first . 比请先这么做。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.