Получение координат по таймеру. Как сделать таймер ?
Получение координат по таймеру. Как сделать таймер ?
Всем привет!
Делаю приложение, которое раз в определенное время будет получать координаты через GPS/Net.
Уже написал получение координат по нажатию на кнопку.
Как сделать так, чтобы нажав на кнопку, запустился таймер и он раз в минуту обновлял координаты?
Как сам таймер реализовать?
Еще, спрошу сразу, в дальнейшем хочу, чтобы в приложении было две кнопки: одна запускает сервис, который работает в фоне и получает координаты раз в минуту, а другая стопит сервис.
Почитал про сервисы, не особо понял.
Может кто подскажет по этому вопросу еще..
Заранее спасибо!
Делаю приложение, которое раз в определенное время будет получать координаты через GPS/Net.
Уже написал получение координат по нажатию на кнопку.
Как сделать так, чтобы нажав на кнопку, запустился таймер и он раз в минуту обновлял координаты?
Как сам таймер реализовать?
Еще, спрошу сразу, в дальнейшем хочу, чтобы в приложении было две кнопки: одна запускает сервис, который работает в фоне и получает координаты раз в минуту, а другая стопит сервис.
Почитал про сервисы, не особо понял.
Может кто подскажет по этому вопросу еще..
Заранее спасибо!
Re: Получение координат по таймеру. Как сделать таймер ?
Здесь не заметил ничего про таймеры, а вообще гугл отлично работает
http://developer.alexanderklimov.ru/and ... /timer.php
Про сервис спрашивай конкретнее, не пересказывать же учебник.
http://developer.alexanderklimov.ru/and ... /timer.php
Про сервис спрашивай конкретнее, не пересказывать же учебник.
- KamiSempai
- Сообщения: 1339
- Зарегистрирован: 17 фев 2012, 21:23
- Откуда: Мордор
Re: Получение координат по таймеру. Как сделать таймер ?
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.
Хватит таскать макулатуру на тренировку! Используй T Note.
Re: Получение координат по таймеру. Как сделать таймер ?
Сделал два приложения - один сервис и работа с ним, а другое по таймеру вызывает тост.
Теперь хочу, чтобы сервис по таймеру делал определенные действия, но приложение вылетает..
Теперь хочу, чтобы сервис по таймеру делал определенные действия, но приложение вылетает..
Re: Получение координат по таймеру. Как сделать таймер ?
С этим разобрался.
Но появилась проблема. Не знаю даже почему так.
Суть в чем: я запускаю приложение, создается сервис, он работает, делает, что надо. Я нажимаю стрелочку назад, потом зажимаю домик, закрываю там мое приложение, запустившие сервис и все ок. Сервис работает в фоне. Если надо его остановить - запускаю приложение и нажимаю кнопку остановки.
Но!! Если я запустив приложение, выйду из него нажатием домика и потом закрою его через домик(подержу домик, появится список открытых приложений, пальцем в бок на приложении) - тогда возникает ошибка! "в приложении возникла ошибка"
Как так то ? Куда смотреть ? Может знает кто ?
Но появилась проблема. Не знаю даже почему так.
Суть в чем: я запускаю приложение, создается сервис, он работает, делает, что надо. Я нажимаю стрелочку назад, потом зажимаю домик, закрываю там мое приложение, запустившие сервис и все ок. Сервис работает в фоне. Если надо его остановить - запускаю приложение и нажимаю кнопку остановки.
Но!! Если я запустив приложение, выйду из него нажатием домика и потом закрою его через домик(подержу домик, появится список открытых приложений, пальцем в бок на приложении) - тогда возникает ошибка! "в приложении возникла ошибка"
Как так то ? Куда смотреть ? Может знает кто ?
Re: Получение координат по таймеру. Как сделать таймер ?
смотреть ошибку в логе надо.
R.id.team
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
Re: Получение координат по таймеру. Как сделать таймер ?
Феникс, вот лог:
01-11 12:35:38.090: E/AndroidRuntime(685): FATAL EXCEPTION: main
01-11 12:35:38.090: E/AndroidRuntime(685): java.lang.RuntimeException: Unable to start service com.example.traxess.sos.v1.MyService@411e5d38 with null: java.lang.NullPointerException
01-11 12:35:38.090: E/AndroidRuntime(685): at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:2507)
01-11 12:35:38.090: E/AndroidRuntime(685): at android.app.ActivityThread.access$1900(ActivityThread.java:130)
01-11 12:35:38.090: E/AndroidRuntime(685): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1292)
01-11 12:35:38.090: E/AndroidRuntime(685): at android.os.Handler.dispatchMessage(Handler.java:99)
01-11 12:35:38.090: E/AndroidRuntime(685): at android.os.Looper.loop(Looper.java:137)
01-11 12:35:38.090: E/AndroidRuntime(685): at android.app.ActivityThread.main(ActivityThread.java:4745)
01-11 12:35:38.090: E/AndroidRuntime(685): at java.lang.reflect.Method.invokeNative(Native Method)
01-11 12:35:38.090: E/AndroidRuntime(685): at java.lang.reflect.Method.invoke(Method.java:511)
01-11 12:35:38.090: E/AndroidRuntime(685): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
01-11 12:35:38.090: E/AndroidRuntime(685): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
01-11 12:35:38.090: E/AndroidRuntime(685): at dalvik.system.NativeStart.main(Native Method)
01-11 12:35:38.090: E/AndroidRuntime(685): Caused by: java.lang.NullPointerException
01-11 12:35:38.090: E/AndroidRuntime(685): at com.example.traxess.sos.v1.MyService.onStartCommand(MyService.java:130)
01-11 12:35:38.090: E/AndroidRuntime(685): at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:2490)
Вашу подпись, про NPE прочел, сейчас буду искать..
01-11 12:35:38.090: E/AndroidRuntime(685): FATAL EXCEPTION: main
01-11 12:35:38.090: E/AndroidRuntime(685): java.lang.RuntimeException: Unable to start service com.example.traxess.sos.v1.MyService@411e5d38 with null: java.lang.NullPointerException
01-11 12:35:38.090: E/AndroidRuntime(685): at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:2507)
01-11 12:35:38.090: E/AndroidRuntime(685): at android.app.ActivityThread.access$1900(ActivityThread.java:130)
01-11 12:35:38.090: E/AndroidRuntime(685): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1292)
01-11 12:35:38.090: E/AndroidRuntime(685): at android.os.Handler.dispatchMessage(Handler.java:99)
01-11 12:35:38.090: E/AndroidRuntime(685): at android.os.Looper.loop(Looper.java:137)
01-11 12:35:38.090: E/AndroidRuntime(685): at android.app.ActivityThread.main(ActivityThread.java:4745)
01-11 12:35:38.090: E/AndroidRuntime(685): at java.lang.reflect.Method.invokeNative(Native Method)
01-11 12:35:38.090: E/AndroidRuntime(685): at java.lang.reflect.Method.invoke(Method.java:511)
01-11 12:35:38.090: E/AndroidRuntime(685): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
01-11 12:35:38.090: E/AndroidRuntime(685): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
01-11 12:35:38.090: E/AndroidRuntime(685): at dalvik.system.NativeStart.main(Native Method)
01-11 12:35:38.090: E/AndroidRuntime(685): Caused by: java.lang.NullPointerException
01-11 12:35:38.090: E/AndroidRuntime(685): at com.example.traxess.sos.v1.MyService.onStartCommand(MyService.java:130)
01-11 12:35:38.090: E/AndroidRuntime(685): at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:2490)
Вашу подпись, про NPE прочел, сейчас буду искать..
Re: Получение координат по таймеру. Как сделать таймер ?
Не могу разобраться, почему сервис нормально не перезапускается.
Сервис запускается в mainActivity
Вообще, задумка такая: приложение запускается, в онкриейт запускается сервис.
Сервис раз в какое-то время берет координаты и передает их урлом, гетом, на сервер.
И если даже убить приложение - сервис работает в фоне.
Но проблема в том, что если убить приложение - сервис убивается.
Я думаю, проблема в том, что возвращает onStartCommand.. но я уже разные перепробовал START_STICKY, START_NOT_STICKY
все равно умирает, или просто не создается.
Еще почиатл об IntentService классе.. возмонжно его надо использовать ?
Заранее, спасибо за ответ!
вот сам класс сервис:
Сервис запускается в mainActivity
Код: Выделить всё
startService(new Intent(this, MyService.class).putExtra("sos", 0));
Сервис раз в какое-то время берет координаты и передает их урлом, гетом, на сервер.
И если даже убить приложение - сервис работает в фоне.
Но проблема в том, что если убить приложение - сервис убивается.
Я думаю, проблема в том, что возвращает onStartCommand.. но я уже разные перепробовал START_STICKY, START_NOT_STICKY
все равно умирает, или просто не создается.
Еще почиатл об IntentService классе.. возмонжно его надо использовать ?
Заранее, спасибо за ответ!
вот сам класс сервис:
Код: Выделить всё
package com.example.sos.v1;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Locale;
import java.util.Timer;
import java.util.TimerTask;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import android.app.Service;
import android.widget.Toast;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.IBinder;
import android.util.Log;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import android.os.Handler;
public class MyService extends Service {
int sos;
String myLatitude;
String myLongitude;
RequestTask myTask;
private LocationManager locationManager;
// run on another Thread to avoid crash
private Handler mHandler = new Handler();
final Handler handler = new Handler();
Timer timer = new Timer();
final String LOG_TAG = "myLogs";
private LocationListener locationListener = new LocationListener() {
@Override
public void onLocationChanged(Location location) {
myLatitude=Double.toString(location.getLatitude());
myLongitude=Double.toString(location.getLongitude());
}
@Override
public void onProviderDisabled(String provider) {
String Text = "Provider Disabled";
Toast.makeText( getApplicationContext(), Text,Toast.LENGTH_SHORT).show();
}
@Override
public void onProviderEnabled(String provider) {
String Text = "Provider Enabled";
Toast.makeText( getApplicationContext(), Text,Toast.LENGTH_SHORT).show();
}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
}
};
public void onCreate() {
super.onCreate();
Log.d(LOG_TAG, "onCreate");
final Handler handler = new Handler();
}
public int onStartCommand(Intent intent, int flags, int startId) {
Log.d(LOG_TAG, "onStartCommand");
sos = intent.getIntExtra("sos", 1);
someTask();
TimerTask doAsynchronousTask = new TimerTask() {
@Override
public void run() {
handler.post(new Runnable() {
public void run() {
try {
locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListener);
//locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locationListener);
RequestTask myRequestTask = new RequestTask();
myRequestTask.execute("http:lat="+
myLatitude+"&lon="+myLongitude+"&sos="+sos);
//myRequestTask.execute("http:lat=2&lon=5&sos=0");
} catch (Exception e) {
// TODO Auto-generated catch block
}
}
});
}
};
timer.schedule(doAsynchronousTask, 0, 2500);
Toast.makeText(getApplicationContext(), "Service start", Toast.LENGTH_LONG).show();
return START_STICKY;
//return START_NOT_STICKY;
//return super.onStartCommand(intent, flags, startId);
}
public void onDestroy() {
super.onDestroy();
Log.d(LOG_TAG, "onDestroy");
timer.cancel();
Toast.makeText(getApplicationContext(), "Service STOP", Toast.LENGTH_LONG).show();
}
public IBinder onBind(Intent intent) {
Log.d(LOG_TAG, "onBind");
return null;
}
void someTask() {
}
class RequestTask extends AsyncTask<String, String, String>{
String responseString = null;
String responseStatusString = null;
BufferedReader inStream = null;
@Override
protected String doInBackground(String... uri) {
HttpClient httpclient = new DefaultHttpClient();
HttpResponse response;
try {
response = httpclient.execute(new HttpGet(uri[0]));
inStream = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
responseString = inStream.readLine();
} catch (IOException e) {
//TODO Handle problems..
}
return responseString;
}
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
//Do anything with response..
//tv2.setText("T: " +responseString);
}
}//class async
}