بروز خطا
[message]
اشتراک در سوال
رای ها
[dataList]
مشکل در گرفتن طول و عرض جغرافیایی در بعضی از گوشی ها
با سلام
من از کدی برای گرفتن طول و عرض جغرافیایی و نشون دادن نقطه مکانی در گوگل مپ استفاده میکنم ولی متاسفانه در ورژن های بالا کار نمیده.
ورژن گوشی خودم 15 Api هست و به خوبی نشون میده ولی در ورژن 22 Api طول و عرض رو کاملا اشتباه میده و در ورژن 25 Api اصلا نمیده و همیشه 0 به من میده. کد رو میذارم که دوستان بگن مشکل کار من در کجاست و چطور میتونم در تمام ورژن ها کار بده مثل رژن گوشی خودم.
این کلاس TrackGPS :
public class TrackGPS extends Service implements LocationListener {
private final Context mContext;
boolean checkGPS = false;
boolean checkNetwork = false;
boolean canGetLocation = false;
Location loc;
double latitude;
double longitude;
private static final long MIN_DISTANCE_CHANGE_FOR_UPDATES = 10;
private static final long MIN_TIME_BW_UPDATES = 1000 * 60 * 1;
protected LocationManager locationManager;
public TrackGPS(Context mContext) {
this.mContext = mContext;
getLocation();
}
private Location getLocation() {
try {
locationManager = (LocationManager) mContext
.getSystemService(LOCATION_SERVICE);
// getting GPS status
checkGPS = locationManager
.isProviderEnabled(LocationManager.GPS_PROVIDER);
// getting network status
checkNetwork = locationManager
.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
if (!checkGPS && !checkNetwork) {
Toast.makeText(mContext, "No Service Provider Available", Toast.LENGTH_SHORT).show();
} else {
this.canGetLocation = true;
// First get location from Network Provider
if (checkNetwork) {
Toast.makeText(mContext, "Network", Toast.LENGTH_SHORT).show();
try {
locationManager.requestLocationUpdates(
LocationManager.NETWORK_PROVIDER,
MIN_TIME_BW_UPDATES,
MIN_DISTANCE_CHANGE_FOR_UPDATES, this);
Log.d("Network", "Network");
if (locationManager != null) {
loc = locationManager
.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
}
if (loc != null) {
latitude = loc.getLatitude();
longitude = loc.getLongitude();
}
}
catch(SecurityException e){
}
}
}
// if GPS Enabled get lat/long using GPS Services
if (checkGPS) {
Toast.makeText(mContext,"GPS",Toast.LENGTH_SHORT).show();
if (loc == null) {
try {
locationManager.requestLocationUpdates(
LocationManager.GPS_PROVIDER,
MIN_TIME_BW_UPDATES,
MIN_DISTANCE_CHANGE_FOR_UPDATES, this);
Log.d("GPS Enabled", "GPS Enabled");
if (locationManager != null) {
loc = locationManager
.getLastKnownLocation(LocationManager.GPS_PROVIDER);
if (loc != null) {
latitude = loc.getLatitude();
longitude = loc.getLongitude();
}
}
} catch (SecurityException e) {
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
return loc;
}
public double getLongitude() {
if (loc != null) {
longitude = loc.getLongitude();
}
return longitude;
}
public double getLatitude() {
if (loc != null) {
latitude = loc.getLatitude();
}
return latitude;
}
public boolean canGetLocation() {
return this.canGetLocation;
}
public void showSettingsAlert() {
AlertDialog.Builder alertDialog = new AlertDialog.Builder(mContext);
alertDialog.setTitle("GPS Not Enabled");
alertDialog.setMessage("Do you wants to turn On GPS");
alertDialog.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
mContext.startActivity(intent);
}
});
alertDialog.setNegativeButton("No", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
}
});
alertDialog.show();
}
public void stopUsingGPS() {
if (locationManager != null) {
locationManager.removeUpdates(TrackGPS.this);
}
}
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onLocationChanged(Location location) {
}
@Override
public void onStatusChanged(String s, int i, Bundle bundle) {
}
@Override
public void onProviderEnabled(String s) {
}
@Override
public void onProviderDisabled(String s) {
}
}
و این هم طریقه استفادش در اکتیویتی :
if(gps.canGetLocation()){
longitudeGps = gps.getLongitude();
latitudeGps = gps .getLatitude();
Toast.makeText(getApplicationContext(),"Longitude:"+Double.toString(longitudeGps)+"\nLatitude:"+Double.toString(latitudeGps),Toast.LENGTH_SHORT).show();
} else {
gps.showSettingsAlert();
}
ممنون میشم راهنمایی کنید
0
0
کسی نمیدونه چرا در بعضی از گوشی ها جواب میده ولی در بعضی گوشی ها با اندروید بالای 4.2.2 جواب نمیده؟! (9 سال پیش)
+1
0
شاید بخاطر اینکه mock location در اون گوشی فعال باشه . (9 سال پیش)
0
0
توی تنظیمات گوشی منظورتونه؟ خب این ینی چکار میکنه؟!
(9 سال پیش)
+1
0
بله هم میتونه گزینه mock location توی خود گوشی روشن باشه و هم اینکه برنامه ای نصب باشه که اینکار رو انجام میده ( mock location = دادن مختصات جغرافیایی غلط ) . شما باید توی کدهات اول چک کنی که این گزینه فعال هست و یا برنامه ای اینکارو میکنه و اگر جواب مثبت بود برای شما چیزی برنگردونه و اگر هم جواب منفی بود اونوقت مختصات براتون بیاد . لینک (9 سال پیش)
0
0
این هم جواب نداد. بنظرتون چه ایراد دیگه ای میتونه باشه؟! (9 سال پیش)
0
0
کسی نیست چه چیزی دیگه ای دلیل میشه که در ورژن های بالا کار نده (9 سال پیش)
0
0
کسی نمیتونه کمکی کنه!؟ عجیبه واقعا آخه خیلیا ت انجمن در مورد طول و عرض جغرافیایی بحث کردن و حالا من با این مشکل مواجه شدم که البته این مشکل من جایی مطرح نشده بود. (9 سال پیش)
+1
0
لینک .......https://github.com/googlesamples/android-play-location (9 سال پیش)
0
0
ممنونم سامی جان ولی از این لینکی که معرفی کردین سر در نمیارم. (9 سال پیش)
برای این سوال 1 پاسخ وجود دارد.
پاسخ به سوال
mosafer
9 سال پیش
0
0
سلام سامی جان اون لینکی که معرفی کردین برای غیر فعال کردن mock location من استفاده کردم ولی قسمت آخرش که برای غیرفعال کردن mock location یه جاییش خطا میده..
LocationManager lm = (LocationManager) getSystemService(LOCATION_SERVICE);
try {
Log.d(TAG ,"Removing Test providers")
lm.removeTestProvider(LocationManager.GPS_PROVIDER);
} catch (IllegalArgumentException error) {
Log.d(TAG,"Got exception in removing test provider");
}
lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000, 0, locationListener);
locationListener رو خطا میده که تعریف نشده است. کجا و به چه شکلی باید تعریفش کنم؟
ممنون میشم راهنمایی کنید
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .