android - 使用 Gps 进行位置跟踪

标签 android

我正在使用服务类来调用我的内部类,该类实现 Location Listener 为我提供我的位置详细信息......但我需要定期执行此操作......我使用了带循环器的 Thread 但它只执行曾经请帮忙

这是我的最新答案 更新的答案

    public class MyService extends Service 
{
     String GPS_FILTER = "";
     Thread triggerService;
     LocationListener locationListener;
     LocationManager lm;
     private static final long MINIMUM_DISTANCE_CHANGE_FOR_UPDATES = 1000; // in Meters
     private static final long MINIMUM_TIME_BETWEEN_UPDATES = 1000*60; // in Milliseconds
     protected LocationManager locationManager;
     boolean isRunning = true;
     @Override
     public void onCreate() 
     {
           // TODO Auto-generated method stub
           super.onCreate();
           GPS_FILTER = "MyGPSLocation";
//           locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
//           locationManager.requestLocationUpdates(
//                   LocationManager.GPS_PROVIDER, 
//                   MINIMUM_TIME_BETWEEN_UPDATES, 
//                   MINIMUM_DISTANCE_CHANGE_FOR_UPDATES,
//                   new MyLocationListener());
     }

     @Override
     public void onStart(Intent intent, int startId)
     {
           // TODO Auto-generated method stub
           super.onStart(intent, startId);     
           turnGPSOn();
           Toast.makeText(getApplicationContext(), "Hello1",Toast.LENGTH_LONG).show();
           LocationManager locationManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
           locationListener = new MyLocationListener();
           locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,MINIMUM_TIME_BETWEEN_UPDATES, 1.0f, locationListener);

     }

     @Override
     public void onDestroy() {
           // TODO Auto-generated method stub
           super.onDestroy();
          // removeGpsListener();
     }

     @Override
     public IBinder onBind(Intent intent) {
           // TODO Auto-generated method stub
           return null;
     }

//     private void removeGpsListener(){
//           try{
//                 lm.removeUpdates(locationManager);
//           }
//           catch(Exception ex){
//                 System.out.println("Exception in GPSService --- "+ex);
//           }
//     }


     private class MyLocationListener implements LocationListener
     {

         public void onLocationChanged(Location location) 
         {
            postdata(location.getLatitude(),location.getLongitude());
             String message = String.format(
                     "New Location \n Longitude: %1$s \n Latitude: %2$s",
                     location.getLongitude(), location.getLatitude()
             );
             Toast.makeText(MyService.this, message, Toast.LENGTH_LONG).show();
             turnGPSOnOff();
         }

         public void onStatusChanged(String s, int i, Bundle b) {
//              Toast.makeText(MyService.this, "Provider status changed",
//                     Toast.LENGTH_LONG).show();
         }

         public void onProviderDisabled(String s) {
//             Toast.makeText(MyService.this,
//                     "Provider disabled by the user. GPS turned off",
//                     Toast.LENGTH_LONG).show();
         }

         public void onProviderEnabled(String s) {
//             Toast.makeText(MyService.this,
//                     "Provider enabled by the user. GPS turned on",
//                     Toast.LENGTH_LONG).show();
         }

     }

也可以调用服务

 Calendar cur_cal = Calendar.getInstance();
   cur_cal.setTimeInMillis(System.currentTimeMillis());
   Intent intent = new Intent(this, MyService.class);
   PendingIntent pintent = PendingIntent.getService(login.this, 0, intent, 0);
   AlarmManager alarm = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
   alarm.setRepeating(AlarmManager.RTC_WAKEUP, cur_cal.getTimeInMillis(), 60*1000, pintent);

最佳答案

试试这个...

TimerTask doAsynchronousTask;
long timerCall = 5000;  
final Handler handler = new Handler();  
Timer timer = new Timer();

public static int times = 0;

 // For tracking
doAsynchronousTask = new TimerTask() {
        @Override
        public void run() {
            handler.post(new Runnable() {
                public void run() {
                    try {
                        performBackgroundTask.execute();//In this function add your code which you want to  call repeatedly. OR ADD  lm = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
                         Toast.makeText(getApplicationContext(), "Hello1",Toast.LENGTH_LONG).show();
                         gpsLocationListener = new GpsListener();
                         long minTime = 30000; // 5 sec...
                         float minDistance = 10;
                         lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, minTime, minDistance, gpsLocationListener);

                         Log.d("BGT", "BGT=" + times++);//how many time it called
                    } catch (Exception e) {
                    }
                }
            });
        }
    };
    timer.schedule(doAsynchronousTask, 0, timerCall);// execute in every 50000 ms

`

关于android - 使用 Gps 进行位置跟踪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11242234/

相关文章:

android - 错误 : select Android SDK

android - 在 Android 的 GridView 中记录 2 列随机播放?

java - Android ScrollView 将不再滚动

Android - 圆角矩形内的圆角矩形

android - JUnit 本地测试 - 'Unresolved reference: test'

Android MotionLayout中的CustomAttribute改变TextView中的Text

android - 应用程序随机崩溃,致命信号 7 (SIGBUS),代码 2 或致命信号 11 (SIGSEGV),代码 1

android - 获取编辑文本字段的值

java - 解析 Yelp API v2 JSON 空指针异常

android - 为什么 Gradle 无法解析 Kotlin Gradle 插件