Android服务OnStartCommand无法正常工作

时间:2015-07-17 06:47:39

标签: java android service

我正在尝试在android中创建一个简单的服务。

我检查了Settings->应用程序标签,我可以看到该服务正在运行。不幸的是,OnStartCommand函数没有被执行。我甚至看不到祝酒词。

这是我的代码:

服务类

public class CertisServices extends Service {
    GPSTracker gps;
    private double latitude = 0;
    private double longitude = 0 ;

    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }


    public int OnStartCommand(Intent intent, int flags, int startId){


        get_my_gps_location();
        String lati = String.valueOf(latitude);
        String longi = String.valueOf(longitude);

            Toast.makeText(this, "Services started : ", Toast.LENGTH_LONG).show();

            send_data(lati, longi);


        return START_STICKY;
    }

    public void OnDestroy (){
        super.onDestroy();

        Toast.makeText(this, "Services stopped", Toast.LENGTH_LONG).show();

    }

    private void send_data(String lat, String lng){
        HttpClient httpclient = new DefaultHttpClient();
        // Your URL
        HttpPost httppost = new HttpPost("http://172.16.110.3/agent_tracking/index.php/api/rest/get-schedules/");

        try {
            List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
            // Your DATA
            nameValuePairs.add(new BasicNameValuePair("latitude", lat));
            nameValuePairs.add(new BasicNameValuePair("longitude", lng));

            httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));

            HttpResponse response;
            response = httpclient.execute(httppost);
        } catch (ClientProtocolException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    private void get_my_gps_location(){

        gps = new GPSTracker(CertisServices.this);

        // check if GPS enabled
        if(gps.canGetLocation()){

            latitude = gps.getLatitude();
            longitude = gps.getLongitude();


        }else{
            // can't get location
            // GPS or Network is not enabled
            // Ask user to enable GPS/network in settings
            //gps.showSettingsAlert();
        }

    }
}

主要活动

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        getActionBar().setDisplayHomeAsUpEnabled(true);


        startService(new Intent(getBaseContext(), CertisServices.class));

我没有收到任何错误消息。任何人都可以帮我解决这个问题吗?感谢。

2 个答案:

答案 0 :(得分:2)

正如@pskink所说,你的服务代码中有拼写错误。尝试将OnStartCommand方法重命名为onStartCommand(以及OnDestroyonDestroy)。

如果它没有解决您的问题,您应该检查您是否在清单中声明了您的服务:

<service android:name="your.package.CertisService" />

答案 1 :(得分:0)

尝试使用日志而不是吐司。 OnStartCommand()可能正在执行,但有时(在我的情况下从不)Toast消息永远不会出现。尝试调试服务。