【问题标题】:getting periodically network provider updates within certain intervals在特定时间间隔内定期获取网络提供商更新
【发布时间】:2013-09-13 22:02:39
【问题描述】:

我的目标是在一定的时间间隔(x 秒)内使用 requestlocationupdate() 方法从网络提供商那里定期获取位置更新,然后执行 LocationManager.removeUpdates() 方法来删​​除更新并尽可能降低功耗,

我面临的问题是每 45 秒调用 requestlocationupdate() 方法并调用 onlocationchanged 方法,即使它的“mintime”(此方法中的第二个参数)小于 45 !!,为什么会发生这种情况?

另外,第二个问题是在每个间隔期间,我需要调用requestlocationupdates方法并记录用户位置的当前经纬度,并将其与记录的最后一个位置的经纬度进行比较,如果相同(用户仍然静止),显示“您的最后一个位置是......”,如果位置发生变化,则显示“您更新的位置是......”。
我该怎么做?

我尝试使用 handler.post(myRunnable) 并使用 timertask 类调用可运行对象来解决此问题,以每 (x 秒) 执行一次 requestlocationupdates() 方法,这在 timertask 输入参数中确定。

当我测试此代码时,它每 x 秒获取一次纬度和经度,但即使我仍在同一位置,它的记录值也会发生变化!

另外,在 onlocationchanged() 覆盖方法中编写任何代码是否代表了节能方面的好方法?

另外,您能告诉我如何获得任何网络提供商(wifi/3G)的准确性吗?

任何帮助将不胜感激!

代码如下:

初始化:

Timer t1;
Timer t2;
TimerTask mTimerTask1;
TimerTask  mTimerTask2;
Handler hand;
Handler hand1;
public LocationManager locationManager;
// flag for GPS status
boolean isGPSEnabled = false;

// flag for network status
boolean isNetworkEnabled = false;
Location location; // location
double latitude; // latitude
double longitude; // longitude
double Altitude; // longitude
double accuracy; // accuracy


// The minimum distance to change notifications Updates in meters
private static final long MIN_DISTANCE_CHANGE_FOR_UPDATES = 0; // 0 meters

// The minimum time between notifications updates in milliseconds
private static final long MIN_TIME_BW_UPDATES = 10; // 10 sec 

处理程序部分:

 Runnable run1 = new Runnable() {
    public void run() {

        mTimerTask1 = new TimerTask() {
            public void run() {
                hand.post(new Runnable() {
                    public void run() {
                        if(check_conectivity()){
                            //flag1=false;
                            get_location();
                            time++;
                        }

                    }
                });

            }
        };
t1.scheduleAtFixedRate(mTimerTask1, 0, 10000);

    }
};

check_connectivity 方法:

public boolean check_conectivity(){


    // put the reference LocationManger
    locationManager = (LocationManager)getSystemService(LOCATION_SERVICE);
    // getting network status
    // isProviderEnabled ==> Returns the current enabled/disabled status of the NETWORK_PROVIDERr.
    //  If the user has enabled this provider in the Settings menu, true is returned otherwise false is returned
    isNetworkEnabled = locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER);

    if ( !isNetworkEnabled) {
        // no network provider is enabled
        showSettingsAlert();
        return false;

    } 
    else{

        return true;
    }

}

get_location 方法:

public void get_location(){

                    if (isNetworkEnabled) {

    locationManager.requestLocationUpdates(
            LocationManager.NETWORK_PROVIDER,MIN_TIME_BW_UPDATES,MIN_DISTANCE_CHANGE_FOR_UPDATES, this);
    Log.d("Network", "Network");

onlocationchanged() 覆盖方法:

if (locationManager!= null){

    location = locationManager
            .getLastKnownLocation(LocationManager.NETWORK_PROVIDER);

    if (location != null) {
        latitude = location.getLatitude();
        longitude = location.getLongitude();

        tv2.setText("Your last Location is - \nLat: " + latitude + "\nLong: " + longitude );
        tv3.setText("Last estimeted location number : " + time1);
        time1++;
        stopUpdating();

【问题讨论】:

    标签: android


    【解决方案1】:

    你能告诉我如何获得任何网络提供商 (wifi/3G) 的准确性

    据我所知,你不能。但是您可以过滤响应并告诉设备仅在准确性为......时通知您。

    首先你可以使用postDelayed 而不是post

    private int mSampleDurationTime = 10000; // 10 sec for example 
    ...    
    mHandler.postDelayed(mRunnable, mSampleDurationTime);`
    

    第二,您可以尝试获得我的答案之一中描述的“最佳位置”,请参阅链接here

    希望对你有帮助,

    【讨论】:

    • 如果我想获得网络提供商的准确性,我可以使用 location.getAccuracy() 吗?有好处吗?
    • 当然,getAccuracy 以米为单位返回您的值。如果准确度例如 10,则表示 GPS 以 95% 的精度猜测您在半径 10 米内的位置。
    • 这对 GPS 来说是正确的,但是对于 Networkprovider,我得到的准确度值等于 45 或 50,这是否意味着拥有 68% 的 networkprovider 会在 45 米的半径范围内猜测我的位置?
    • 在室内还可以,GPS 提供商的精度更高
    • 但 GPS 电池耗电,并且在室内环境中精度较低。我的目标是获得室内位置,因此基于网络位置(wi-fi)的网络更好?
    猜你喜欢
    • 2020-08-18
    • 2011-11-01
    • 2017-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多