4

LocationListener インターフェイスを実装する IntentService を作成しました。サービスは、OnLocationChanged() メソッドが初めて呼び出されたときにメッセージを送信する必要があります。しかし、OnLocationChanged() は決して呼び出されません。これが私のコードです:

public class MyIntentService extends IntentService implements LocationListener {

    private int result = Activity.RESULT_CANCELED;
    protected Messenger mMessenger;
    protected LocationManager mLocationManager = null;

    public MyIntentService() {
        super("LocationService");
    }

    @Override
    protected void onHandleIntent(Intent intent) {
        Log.i(TAG, "Got starting intent: " + intent.toString());
        Bundle extras = intent.getExtras();

        if (extras != null) {
            Messenger = (Messenger) extras.get("MESSENGER");

            if(mLocationManager == null) {  
            mLocationManager =  (LocationManager) MyIntentService.this
                                    .getSystemService(Context.LOCATION_SERVICE);
            }
            String provider = LocationManager.GPS_PROVIDER;
            boolean gpsIsEnabled = mLocationManager.isProviderEnabled(provider);

            if(gpsIsEnabled) {
                Context con = MyIntentService.this;
                mLocationManager.requestLocationUpdates(provider, 0, 0,
                                                        MyIntentService.this);
            } 
            else {
                Log.i(TAG, "NO GPS!");
            }
        }

    @Override
    public void onLocationChanged(Location location) {
        Log.i(TAG, "Got Location");
        Log.i(TAG, "Got Messenger: " + mMessenger.toString() 
                    + "\nand Location Manager: " + mLocationManager.toString());

        if(mMessenger != null && mLocationManager != null){
            result = Activity.RESULT_OK;
            Message msg = Message.obtain();
            msg.arg1 = result;
            msg.obj = location;
            mLocationManager.removeUpdates(MyIntentService.this);

            try { mMessenger.send(msg); } 
            catch (RemoteException e) {
                Log.i(TAG, "Exception caught : " + e.getMessage());
            }
        }
    }

    @Override
    public void onProviderDisabled(String provider) {}

    @Override
    public void onProviderEnabled(String provider) {}

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

}

誰にもアイデアがありますか?

4

1 に答える 1

7

LocationListener インターフェイスを実装する IntentService を作成しました。

それは良い考えではありません。Anは、メソッドIntentServiceを超えて存在することは何もすべきではありません。onHandleIntent()

サービスは、OnLocationChanged() メソッドが初めて呼び出されたときにメッセージを送信する必要があります。しかし、OnLocationChanged() は決して呼び出されません。

実装に基づいて、サービスは作成後 1 ミリ秒程度で破棄されるため、これは驚くべきことではありません。

常に最新の位置情報を取得することが目的の場合は、Little Fluffy Location Libraryを試してください。または、私のLocationPoller.

于 2012-04-25T17:59:19.013 に答える