0

我有由 BrodcastReceiver 运行的服务,它应该运行并给我我请求的 GPS 数据,我在做了应该做的事情后停止了它,但我注意到它没有向我提供请求的数据并且没有也停止,任何机构都可以帮助我找出我的问题,代码如下和在真实设备中测试的服务:

import android.app.Service;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.os.IBinder;
import android.os.SystemClock;
import android.widget.Toast;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;

public class GpsService extends Service implements LocationListener{
    static LocationManager mlocManager;

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

    }

    @Override
    public void onDestroy() {

    }

    @Override
    public void onStart(Intent intent, int startid) {
        mlocManager = (LocationManager)this.getSystemService(Context.LOCATION_SERVICE);
        mlocManager.requestLocationUpdates( LocationManager.GPS_PROVIDER,0, 0,this);

    }

        @Override
    public void onLocationChanged(Location loc)
    {
    loc.getLatitude();
    loc.getLongitude();
    String Text = "My current location is: " +"Latitud = " + loc.getLatitude() +"Longitud = " + loc.getLongitude();
   Toast.makeText( getApplicationContext(),Text,Toast.LENGTH_SHORT).show(); 
    // Here to stop the service and make it finish its task
    SystemClock.sleep(40000);
    // stop the Gps system by this application
    mlocManager.removeUpdates(this);
    //Here to stop the service by itself
    stopSelf();

    }
    @Override
    public void onProviderDisabled(String provider)
    {
    Toast.makeText( getApplicationContext(),"Gps Disabled",Toast.LENGTH_SHORT ).show();
    }

    @Override
    public void onProviderEnabled(String provider)
    {
    Toast.makeText( getApplicationContext(),"Gps Enabled",Toast.LENGTH_SHORT).show();
    }
    @Override

    public void onStatusChanged(String provider, int status, Bundle extras)
    {
    }


}
4

1 回答 1

0
  1. 您对清单有正确的权限吗?
  2. 你为什么让服务休眠这么长时间?该服务在UI线程上工作,这样的事情可能会导致服务在大约5秒后被系统自动杀死,因为ui线程没有响应。
  3. 如果您想延迟 toast 的停止和/或显示,请使用 Handler (和 postDelayed) ,或使用 asyncTask ,或您自己的东西。
  4. 你的gps打开了吗?您是否考虑过使用假定位应用程序或模拟器来完成此任务?
  5. 祝你好运 。
于 2012-05-12T18:14:59.740 回答