1

HTC Desire S で GPS をいじっていて、非常に小さな地図アプリケーションを作成しました。このアプリに出くわすまでは、非常にうまく機能していました。再度アンインストールしたところ、GPS が機能しなくなりました。修正時間があることは知っていますが、

locManager.isProviderEnabled(LocationManager.GPS_PROVIDER)

ALWAYS は true を返し、アプリは位置情報の更新を要求しなくなりました。

GPSMapTrackerService.java:

package net.hobbycoder.android.gpsmap;

import android.app.Service;
import android.content.Context;
import android.content.Intent;
import android.content.res.Resources;
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 GPSMapTrackerService extends Service implements LocationListener {

    private Resources res;
    private FileManager fileManager;
    private LocationManager locManager;
    private boolean showNotification = true;

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

    @Override
    public void onCreate() {
        res = getResources();
        fileManager = new FileManager(getApplicationContext());
        locManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE);
        //GPS on?
        if(!locManager.isProviderEnabled(LocationManager.GPS_PROVIDER)){
            Toast.makeText(this, res.getString(R.string.noGPSText), Toast.LENGTH_LONG).show();
            showNotification = false;
            stopSelf();
        }
        else{
            showNotification = true;
        }
    }

    @Override
    public void onStart(Intent intent, int startID) {
        locManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, this);
        if(showNotification)
            Toast.makeText(this, res.getString(R.string.startedText), Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onDestroy() {
        locManager.removeUpdates(this);
        if(showNotification)
            Toast.makeText(this, res.getString(R.string.stoppedText), Toast.LENGTH_SHORT).show();
    }

    public void onLocationChanged(Location loc) {
        fileManager.write(loc.getLatitude() + ":" + loc.getLongitude() + ";");
    }

    public void onProviderDisabled(String provider) {

    }

    public void onProviderEnabled(String provider) {

    }

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

    }
}

時計ウィジェットの下のテキストには、ニューヨークにいるのにドイツにいると表示されているため、場所が動かなくなったようです。

このアプリも機能していないため、問題は私のコードにはありません。

誰かが助けてくれることを願っています:(

4

2 に答える 2

0

GPS Status&Tooboxアプリを使用してGPSデータをクリアし、再ダウンロードしてみてください。私は現在アプリを持っていませんが、メニューオプションのどこかにあります。

于 2012-07-18T19:02:52.443 に答える
0

Service.onStart()は非推奨であり、推奨されるService.onStartCommand()ドキュメントを読むと、API によっては onStart() が呼び出されない場合があることがわかります。

onStart() を onStartCommand() に変更してみてください。

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    locManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, this);
    if(showNotification)
        Toast.makeText(this, res.getString(R.string.startedText), Toast.LENGTH_SHORT).show();
}

また、オーバーライドされたメソッドでsuper関数を呼び出すことはありませんそれらすべてを更新します (何もしない onBind() を除く):

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

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    locManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, this);
    if(showNotification)
        Toast.makeText(this, res.getString(R.string.startedText), Toast.LENGTH_SHORT).show();
    return super.onStartCommand(intent, flags, startId);
}

// etc, etc
于 2012-07-18T18:45:14.317 に答える