Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/200.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 不更新服务线程中的位置_Android_Gps_Android Service_Android Location - Fatal编程技术网

Android 不更新服务线程中的位置

Android 不更新服务线程中的位置,android,gps,android-service,android-location,Android,Gps,Android Service,Android Location,我正在使用后台服务获取特定时间间隔内的位置坐标,并对数据库执行更新操作。我已经搜索了许多类似的问题,但没有得到帮助 我在服务中创建了执行此操作的线程但当服务未更新位置时,我被卡住了。我发现线程中没有调用方法“requestLocationUpdates()”。事实上,我在线程中使用了Toast方法,该方法也不起作用 问题可能出在传递到上述两个方法的“上下文”参数中。但我无法更正此代码 主要关注的是从服务中的线程获取准确的位置,并将其更新到服务器。会计这部分请告诉我正确的代码或任何其他源代码,以更

我正在使用后台服务获取特定时间间隔内的位置坐标,并对数据库执行更新操作。我已经搜索了许多类似的问题,但没有得到帮助

我在服务中创建了执行此操作的线程但当服务未更新位置时,我被卡住了。我发现线程中没有调用方法“requestLocationUpdates()”。事实上,我在线程中使用了Toast方法,该方法也不起作用

问题可能出在传递到上述两个方法的“上下文”参数中。但我无法更正此代码

主要关注的是从服务中的线程获取准确的位置,并将其更新到服务器。会计这部分请告诉我正确的代码或任何其他源代码,以更好的方式说明相同的功能。这是我的密码

public class IcareService extends Service implements LocationListener
{   

 private Handler mUserLocationHandler = null;
 Thread triggerService; 
 LocationManager lm;
 Criteria criteria;
 String provider,lat,lon,rid;



    @Override
 public void onDestroy() {
 // TODO Auto-generated method stub
 super.onDestroy();
 Toast.makeText(this, "Stopping  Service and so thread...", Toast.LENGTH_SHORT).show();
 mUserLocationHandler.getLooper().quit();
 }


  @Override
  public IBinder onBind(Intent intent) 
    {
     //Not implemented...this sample is only for starting and stopping services.
     //Service binding will be covered in another tutorial
     return null;
    }


    @Override
    public void onCreate() 
    {
            super.onCreate();
    }


    @Override
    public int onStartCommand(Intent intent, int flags, int startId) 
    {
      super.onStartCommand(intent, flags, startId);
      //Announcement about starting
      Toast.makeText(this, "Starting Service...", Toast.LENGTH_SHORT).show();
      addLocationListener();            
      return START_STICKY;
    }




    private void addLocationListener()
    {
        triggerService = new Thread(new Runnable(){
        public void run(){
         try{
              Looper.prepare();//Initialise the current thread as a looper.

              mUserLocationHandler = new Handler();

              lm = (LocationManager)getSystemService(Context.LOCATION_SERVICE);

             // Creating a criteria object to retrieve provider
             Criteria c = new Criteria();
             criteria.setAccuracy(Criteria.ACCURACY_COARSE); 

            // Getting the name of the best provider
            final String PROVIDER = lm.getBestProvider(c, true);

        //This 2 below statement not executing...       
          lm.requestLocationUpdates(PROVIDER, 7000, 5, IcareService.this);
      Toast.makeText(IcareService.this, "Updating Location...", Toast.LENGTH_SHORT).show();


            Thread.sleep(7000);                    
            Looper.loop();
                }catch(Exception ex){
                    ex.printStackTrace();
                }
            }
        }, "LocationThreadicare");
        triggerService.start();
    }


@Override
    public void onLocationChanged(Location location) {
// Getting latitude of the current location
double latitude = location.getLatitude();
lat = Double.toString(latitude);

 // Getting longitude of the current location
 double longitude = location.getLongitude();
 lon= Double.toString(longitude);
 Toast.makeText(this, "Gt loc nw sendng to srvr", Toast.LENGTH_SHORT).show();

     SendtoServer();            

}


      @Override
      public void onProviderDisabled(String provider) {
  // 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

    } 


    SendtoServer(){
    .............}
}

不要使用Toast进行调试(顺便说一下,它需要在UI线程上运行,也就是主线程),使用

将此类日志添加到
onCreate()
/
onDestroy()
还有名胜古迹,你会看到发生了什么


使用adb logcat查看日志。

你好,aseem,我面临类似问题。你有解决这个问题的办法吗?。请让我知道,我从上个星期就解决了这个问题,但运气不好。提前谢谢你。@amolsawant96Kuli嗨,amol我真的很抱歉没有回复,因为我已经三个月没有成为活跃用户了……是的,三个月前我就解决了这个问题,但现在我几乎忘记了一切,因为我已经完全改变了我的职业轨道,从android开发者开始……我很抱歉。我希望你以前已经解决了这个问题。我只能对你的生活说最美好的祝愿。
Log.d("--------","\n\n-------"+Thread.currentThread().getName()+"\n\n");