无法重新启动Gps

时间:2012-01-11 10:00:46

标签: android gps broadcastreceiver restart

Hai我试图停止并启动Gps位置。当我的应用程序启动时,Gps已启动。在我的broadCast接收器中,我需要停止gps并再次启动它。但我的Gps没有停止。任何人请整理帮助我

 public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    latituteField = (TextView) findViewById(R.id.TextView02);
    longitudeField = (TextView) findViewById(R.id.TextView04);
    locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
    // Define the criteria how to select the locatioin provider -> use
    // default
    Criteria criteria = new Criteria();
    Log.i("ConnTest",locationManager.toString());
provider = locationManager.getBestProvider(criteria, false);
Location location = locationManager.getLastKnownLocation(provider);

// Initialize the location fields
if (location != null) {
    System.out.println("Provider " + provider + " has been selected.");
    float lat = (float) (location.getLatitude());
    float lng = (float) (location.getLongitude());
    latituteField.setText(String.valueOf(lat));
    longitudeField.setText(String.valueOf(lng));
    final   double  a=(int) (location.getLatitude() * 1E6);
 final  double  b=(int) (location.getLongitude() * 1E6);
str = Double.toString(a);
str2=Double.toString(b);

} else {
    latituteField.setText("provider not available");
    longitudeField.setText("provider not available");
}

    txtNetworkInfo = (TextView)findViewById(R.id.txtNetworkInfo);

    receiver = new ConnectivityReceiver();

            registerReceiver(receiver,new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION));


}
@Override
protected void onResume() {
    super.onResume();
    //locationManager.requestLocationUpdates(provider,1000, 1, this);
    locationManager.requestLocationUpdates(
            provider, 
            MINIMUM_TIME_BETWEEN_UPDATES, 
            MINIMUM_DISTANCE_CHANGE_FOR_UPDATES,
            this
    );
}

/* Remove the locationlistener updates when Activity is paused */
@Override
protected void onPause() {
    super.onPause();
    locationManager.removeUpdates(this);
}

@Override
public void onLocationChanged(Location location) {
    // TODO Auto-generated method stub
    float lat = (float) (location.getLatitude());
    float lng = (float) (location.getLongitude());
    longitudeField.setText(String.valueOf(lng));
    latituteField.setText(String.valueOf(lat));


}

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

}

@Override
public void onProviderEnabled(String provider) {
    // TODO Auto-generated method stub
    Toast.makeText(this, "Enabled new provider " + provider,
            Toast.LENGTH_SHORT).show();

}

@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
    // TODO Auto-generated method stub
    Toast.makeText(this, "Disenabled provider " + provider,
            Toast.LENGTH_SHORT).show();

}
protected void Display(Cursor c) {
    Toast.makeText(this, "rowid: " + c.getString(0) + "\n" +
     "Latitude: " + c.getString(1) + "\n" + "Longitude: " + c.getString(2) + "\n" +
     Toast.LENGTH_LONG, 0).show();    
}

@Override
    protected void onDestroy() {
            unregisterReceiver(receiver);

            super.onDestroy();
    }

private String getNetworkStateString(NetworkInfo.State state){
    String stateString = "Unknown";

    switch(state)
    {
            case CONNECTED:         stateString = "Connected";break;
            case CONNECTING:        stateString = "Connecting";break;
            case DISCONNECTED:      stateString = "Disconnected"; break;
            case DISCONNECTING:     stateString = "Disconnecting";break;
            case SUSPENDED:         stateString = "Suspended";  break;
            default:                        stateString = "Unknown";break;
    }

    return stateString;
}

    private class ConnectivityReceiver extends BroadcastReceiver{

            private Timer mTimer;
            private TimerTask mTimerTask;

            @Override
            public void onReceive(Context context, Intent intent) {
                    NetworkInfo info = intent.getParcelableExtra(ConnectivityManager.EXTRA_NETWORK_INFO);

                    if(null != info)
                    {
                            String state = getNetworkStateString(info.getState());
                            if(state.equals("Connected")){
                                mTimer = new Timer();
                                mTimerTask = new TimerTask() {
                                    @Override
                                    public void run() {
                                        MainActivity.this.runOnUiThread(new Runnable() {

                                            @Override
                                            public void run() {
                                                locationManager.removeUpdates(this);
                                                stop();
                                            }
                                        });

                                   }
                                };
                                mTimer.scheduleAtFixedRate(mTimerTask,180000,180000);
                            }


                            }
            }   
                    }

            }
    private void stop() {
        mTimer = new Timer();
        mTimerTask = new TimerTask() {
            @Override
            public void run() {
                MainActivity.this.runOnUiThread(new Runnable() {

                    @Override
                    public void run() {

                          locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
                    }
                });

           }
        };
        mTimer.scheduleAtFixedRate(mTimerTask,180000,180000);

    }
    }

1 个答案:

答案 0 :(得分:0)

调用onPause()时应该禁用更新。当您按下后,您的GPS不会被禁用?是否有其他应用程序或服务运行使用GPS?