Служба мониторинга GPS в Android - PullRequest
1 голос
/ 18 августа 2011

Я пытаюсь создать программу для Android, которая постоянно (каждую минуту) получает местоположение GPS и затем отправляет его на мой сервер дома (чтобы я всегда знал, где находится мой телефон).Я создал графический интерфейс с кнопкой запуска, которая запускает службу:

start.setOnClickListener(new View.OnClickListener() {
        synchronized public void onClick(View v) {
            startService(new Intent(GpsTest2.this, GTService.class));
        }
});

Тогда мой сервис объявляется так:

public class GTService extends Service implements LocationListener {
}

В этом GTService есть метод для получения данных:

public void onLocationChanged(Location location) {
}

@Override
public void onCreate() {
    super.onCreate();
    LocationManager locMgr = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
    locMgr.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, interval * 1000, minDist, this);
}

В AndroidManifest.xml у меня есть:

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <service android:name=".GTService">
    </service>

Это не похоже на работу: данные не зарегистрированы.Что я тут не так делаю?

Ответы [ 3 ]

1 голос
/ 18 августа 2011

Ваш код работает нормально, кроме этого,

Вы используете LocationManager.NETWORK_PROVIDER

locMgr.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, interval * 1000, minDist, this);

Где, как и должно быть LocationManager.GPS_PROVIDER

locMgr.requestLocationUpdates(LocationManager.GPS_PROVIDER, 2 * 1000, 10, locationListener);

Надеюсь, это обязательно для вас. Спасибо.

0 голосов
/ 23 января 2013

Следующее должно работать нормально,

Манифест:

    <uses-sdk
    android:minSdkVersion="8"
    android:targetSdkVersion="17" />

<uses-permission android:name="android.permission.LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />

<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >
    <activity
        android:name="com.smartconcept.locationmonitor.MainActivity"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

    <service android:name=".GTService" />
</application>

GTService:

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

public class GTService extends Service implements LocationListener {
LocationManager locMgr;
@Override
public IBinder onBind(Intent arg0) {
    // TODO Auto-generated method stub
    return null;
}

@Override
 public void onCreate(){
    super.onCreate();
    locMgr = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
    locMgr.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 1 * 1000, 0, this);
}

@Override
 public void onDestroy(){
    super.onDestroy();
    locMgr.removeUpdates(this);
 }

@Override
public void onLocationChanged(Location loc) {
    Toast.makeText(getBaseContext(), String.valueOf(loc.getLatitude()) + "\n" + String.valueOf(loc.getLongitude()), Toast.LENGTH_SHORT).show();

}

@Override
public void onProviderDisabled(String arg0) {
    // TODO Auto-generated method stub

}

@Override
public void onProviderEnabled(String arg0) {
    // TODO Auto-generated method stub

}

@Override
public void onStatusChanged(String arg0, int arg1, Bundle arg2) {
    // TODO Auto-generated method stub

}

}

MainActivity:

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class MainActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    Button btnStart = (Button)findViewById(R.id.btnStart);
    btnStart.setOnClickListener(new OnClickListener(){

        @Override
        public void onClick(View v) {
            startService(new Intent(MainActivity.this,GTService.class));
        }

    });
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.activity_main, menu);
    return true;
}

}

Надеюсь, это поможет.

0 голосов
/ 28 февраля 2012

Местоположение от провайдера сети не точное.Пожалуйста, используйте GPS вместо.Если вы действительно хотите использовать только сеть, я бы рекомендовал установить для параметра minDistance значение 0

.
...