Я хочу создать приложение, например:
- Я нахожусь в городе X
- Я хочу получать уведомления (например, сигнал тревоги или вибрация и т. Д.), Когда достигаю города Y.
У меня уже есть база данных sqlite, содержащая информацию (широта, долгота) о многих городах.
Я искал в Google и SO, но не нашел правильного решения.
Пока мое исследование говорит следующее:
Что мне нужно сделать, это создать Service
или BroadcastReceiver
, чтобы получить текущее местоположение мобильного телефона с помощью GPS.
Исправьте меня, еслиЯ ошибаюсь.
Я хочу узнать текущую позицию мобильного телефона с интервалом в 10 минут.И на основе этих значений широты и долготы я сравню это с запланированной широтой города по долготе.
Если совпадение произойдет, то оно должно уведомить пользователя.
То, что я сделал:
Я знаю, как узнать текущее местоположение пользователя.(Но не путем создания службы. Это то, что я хотел знать!)
Я могу добавлять задачи в базу данных sqlite.
Пожалуйстанаведите меня, как я могу подойти для этого приложения.
Запуск при запуске приложения пользователем:
Intent i = new Intent(context, MyLocationApps.class);
context.startService(i);
public class MyLocationApps extends Service{
LocationManager locMan;
Location curLocation;
Boolean locationChanged;
LocationListener gpsListener = new LocationListener() {
public void onLocationChanged(Location location) {
// Log.w("GPS", "Started");
if (curLocation == null) {
curLocation = location;
locationChanged = true;
}
if (curLocation.getLatitude() == location.getLatitude() && curLocation.getLongitude() == location.getLongitude())
locationChanged = false;
else
locationChanged = true;
curLocation = location;
if (locationChanged)
locMan.removeUpdates(gpsListener);
}
public void onProviderDisabled(String provider) {
}
public void onProviderEnabled(String provider) {
// Log.w("GPS", "Location changed", null);
}
public void onStatusChanged(String provider, int status,
Bundle extras) {
if (status == 0)// UnAvailable
{
} else if (status == 1)// Trying to Connect
{
} else if (status == 2) {// Available
}
}
};
@Override
public void onCreate() {
Toast.makeText(getBaseContext(),"Inside onCreate of Service", Toast.LENGTH_LONG).show();
Log.e(TAG, "Inside onCreate of Service");
super.onCreate();
locMan = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
locMan.requestLocationUpdates(LocationManager.GPS_PROVIDER,0, 0, gpsListener);
/*if (locMan.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
locMan.requestLocationUpdates(LocationManager.GPS_PROVIDER,20000, 1, gpsListener);
} else {
this.startActivity(new Intent("android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS"));
}
*/
if (curLocation != null) {
double lat = curLocation.getLatitude();
double lng = curLocation.getLongitude();
Toast.makeText(getBaseContext(),"Lat : " + String.valueOf(lat) + "\n Long : "+ String.valueOf(lng), Toast.LENGTH_LONG).show();
}
else
{
Toast.makeText(getBaseContext(),"Didn Get any location", Toast.LENGTH_LONG).show();
}
}
final String TAG="LocationService";
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Toast.makeText(getBaseContext(),"Inside onStartCommand of Service", Toast.LENGTH_LONG).show();
Log.e(TAG, "Inside onStartCommand of Service");
return super.onStartCommand(intent, flags, startId);
}
@Override
public void onLowMemory() {
// TODO Auto-generated method stub
super.onLowMemory();
}
@Override
public void onStart(Intent i, int startId)
{
Toast.makeText(getBaseContext(),"Inside onStart of Service", Toast.LENGTH_LONG).show();
Log.e(TAG, "Inside onStart of Service");
}
public IBinder onBind(Intent arg0) {
Log.e(TAG, "Inside onBind of Service");
return null;
}
}
Проблема в коде
Когда я запускаю приложениев первый раз отображаются сообщения тостов.Но оно никогда не отображает тостовое сообщение, даже если я отправляю местоположение через DDMS.
Где я иду не так, не могли бы вы сказать мне?