程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程綜合問答 >> google maps-Android GPS是返回過時的信息

google maps-Android GPS是返回過時的信息

編輯:編程綜合問答
Android GPS是返回過時的信息

在我現在的應用程序中,返回的位置信息是過時的。我使用一個方法來獲得更新基於最小時間/更新之間的距離。然而,比方說,我把手機關掉,開車去另一個城市,然後把手機打開,在這種情況下我的GPS就會關閉。我怎麼做才能讓app獲得當前的位置,而不是getLastKnownLocation()

我聽說過locationListener,但是我獲得信息關於怎麼用它都很模糊
下邊是我的代碼,希望能對找到問題有點幫助:

public class GPSHandling extends Service implements LocationListener{

    private final Context myContext;

    //gps狀態標記
    public boolean isGPSEnabled = false;

    //網絡狀態標記
    public boolean isNetworkEnabled = false;

    //用於決定是否我能通過網絡或者是GPS獲得位置
    public boolean canGetLocation = false;

    Location myloc;

    public double latitude;
    public double longitude;

    public int MIN_TIME_BTWN_UPDATE = 500*10;  
    public int MIN_DISTANCE_BTWN_UPDATE = 10;  
    protected LocationManager locManager;

    public GPSHandling(Context context){
        this.myContext= context;
        getLocation();
    }
    public Location getLocation(){
        try{
            locManager =(LocationManager) myContext.getSystemService(LOCATION_SERVICE);

            // 現在獲得gps狀態
            isGPSEnabled = locManager.isProviderEnabled(LocationManager.GPS_PROVIDER);

            //獲得網絡狀態
            isNetworkEnabled = locManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER);

            if (!isGPSEnabled && !isNetworkEnabled){
                (this.cangetlocation = false but its already set to that by default)
            }
            else{
                this.canGetLocation=true;
                //首先從網絡提供商獲得值給locManager,發給parameters告訴他們何時更新
                if(isNetworkEnabled){
                    locManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, MIN_TIME_BTWN_UPDATE, MIN_DISTANCE_BTWN_UPDATE, this);
                    Log.d("provider", "network");
                    //如果我們成功了,然後檢查位置信息是不是空,試著從manager處獲得當前位置信息
                    if (locManager != null){
                        myloc =locManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
                            // 在得到當前的位置後,試著獲得經緯度
                            if (myloc != null){
                                latitude = myloc.getLatitude();
                                longitude = myloc.getLongitude();
                                              }
                                           }
                                    }
                //現在從GPS提供商獲得值給locManager,發給parameters告訴什麼時候更新】
                if(isGPSEnabled){
                    locManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, MIN_TIME_BTWN_UPDATE, MIN_DISTANCE_BTWN_UPDATE, this);
                    Log.d("provider", "GPS");
                }
                //如果我們成功了,然後檢查位置信息是不是空,試著從manager處獲得當前位置信息
                    if(locManager!= null){
                        myloc = locManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
                    }
                    //在得到當前的位置後,試著獲得經緯度
                        if(myloc != null){
                            latitude = myloc.getLatitude();
                            longitude = myloc.getLongitude();
                        }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return myloc;
    }
    //通過類方法獲得當前緯度的數據
    public double getMyLatitude(){
        if (myloc!= null){
            latitude = myloc.getLatitude();
        }
        return latitude;
    }
    //通過類方法獲得當前經度的數據
    public double getMyLongitude(){
        if (myloc != null ){
            longitude = myloc.getLongitude();
        }
        return longitude;
    }

    //用這個方法看app是否能獲得當前的坐標
    public boolean canGetMyLocation(){
        return this.canGetLocation;
    }

    public void showGPSDialog(){
        AlertDialog.Builder alert = new AlertDialog.Builder(myContext);
        //設置Dialog Title 
        alert.setTitle("Location Setting");
        // 設置Dialog Message
        alert.setMessage("GPS is not enabled, do you want to enable this now in the settins menue?");

        //給dialog設置icon
        //alert.setIcon(R.drawable.)

        //當點擊的時候設置按鈕
        alert.setPositiveButton("Settins", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int which) {
                Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
                myContext.startActivity(intent);
            }
        });
        //當點擊的時候取消按鈕
        alert.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int which) {
                dialog.cancel();
            }
        });

        //顯示警告dialog
        alert.show();
    }

    public void stopUsingGPS(){
        if(locManager !=null){
            locManager.removeUpdates(GPSHandling.this);
        }
    }


    @Override
    public void onLocationChanged(Location location) {
        // TODO自動生成方法存根

    }

    @Override
    public void onProviderDisabled(String provider) {
        //  TODO自動生成方法存根

    }

    @Override
    public void onProviderEnabled(String provider) {
        // TODO自動生成方法存根

    }

    @Override
    public void onStatusChanged(String provider, int status, Bundle extras) {
        // TODO自動生成方法存根

    }

    @Override
    public IBinder onBind(Intent intent) {
        //  TODO自動生成方法存根
        return null;
    }
}

最佳回答:


您已經在您的代碼中使用了一部分的LocationListener了。你只是沒有完全實現代碼。
在你的代碼中下邊的這個是空的:

@Override
public void onLocationChanged(Location location) {
    // TODO自動生成方法存根

}

這個方法在每次GPS生成一個新的位置信息的時候都要調用的。
你應該把它完成的:

@Override
public void onLocationChanged(Location location) {
    latitude = location.getLatitude();
    longitude = location.getLongitude();
}

就是以上這些了

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved