此代码完美的GPS工作,但我想用Wifi。如何做到这一点?

时间:2012-12-03 06:42:02

标签: android gps

此代码与网络完美配合,但我需要做WiFi测试GPSwifi.so我想做检查GPS无线和网络两者。任何人都无法帮助如何在Android应用程序中完成这项工作。

    public class Map extends MapActivity {
        double longitude;
        double latitude;
        MapView mapView;
        private LocationManager mlocManager;
        private LocationListener mlocListener;
        private boolean gp;
        Geocoder gd;
        GeoPoint point;
        List<Overlay> mapOverlays;
        CustomItemizedOverlay itemizedOverlay;
        MapController mapController;
        private SportingSoccerApplication soccerApplication;
        OverlayItem overlayitem;
        SportingSoccerApplication soccerApplication2;
        Drawable drawable;
        RelativeLayout rv;

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            // TODO Auto-generated method stub
            super.onCreate(savedInstanceState);

            setContentView(R.layout.map);

            rv = (RelativeLayout) findViewById(R.id.relativeLayout1);
            mlocManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
            mlocListener = new MyLocationListener();
            gp = mlocManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
            //Log.v("log_tag", gp + "");
            //if (!gp == true) {
            //  turnGPSOn();
            //}


            mapView = (MapView) findViewById(R.id.mapview);
            mapView.setOnClickListener(new OnClickListener() {

                public void onClick(View v) {

                    mapView.setBuiltInZoomControls(true);

                }
            });

            mapView.setBuiltInZoomControls(true);

            mapOverlays = mapView.getOverlays();
            drawable = this.getResources().getDrawable(R.drawable.markerdark);
            itemizedOverlay = new CustomItemizedOverlay(drawable, this);

                point = new GeoPoint((int) (latitude * 1E6), (int) (longitude * 1E6));
                overlayitem = new OverlayItem(point, "", toString());
                itemizedOverlay.addOverlay(overlayitem);
                mapOverlays.add(itemizedOverlay);
                mapController = mapView.getController();
                mapController.animateTo(point);

                mapController.setZoom(14);

                soccerApplication = (SportingSoccerApplication) getApplication();
        }



        @Override
        protected void onResume() {
            super.onResume();
            mlocManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0,
                    mlocListener);

        }



        public class MyLocationListener implements LocationListener {

            public void onLocationChanged(Location loc) {

                mapView.getOverlays().clear();
                mapView.postInvalidate();
                mapOverlays.clear();
                gd = new Geocoder(getApplicationContext(), Locale.getDefault());
                longitude = loc.getLongitude();
                latitude = loc.getLatitude();
                Log.i("log_tag",longitude+"*******"+latitude);

                /*try {
                    List<Address> place = gd
                            .getFromLocation(latitude, longitude, 1);
                    if(place.size() > 0) {
                     place.get(0).getLocality();
                    }
                    // Toast.makeText(getApplicationContext(), bus_no, 2).show();
                } catch (IOException e) {
                    e.printStackTrace();
                }*/
                point = new GeoPoint((int) (latitude * 1E6),
                        (int) (longitude * 1E6));

                Log.i("log_tag",latitude+"----"+longitude);
                overlayitem = new OverlayItem(point, "", toString());
                itemizedOverlay.addOverlay(overlayitem);
                mapOverlays.add(itemizedOverlay);
                mapController.animateTo(point);
                Log.v("log_tag", "u" + latitude + longitude + "");
                soccerApplication.setLatitude(latitude);
                soccerApplication.setLongitude(longitude);

            }

            public void onProviderDisabled(String provider) {

            }

            public void onProviderEnabled(String provider) {

            }

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

            }
        }



        protected boolean isRouteDisplayed() {
            return false;
        }

    }

此代码适用于Android网络基础,但我需要使用GPS wifi ..

                <?xml version="1.0" encoding="utf-8"?>
                <com.google.android.maps.MapView
                        xmlns:android="http://schemas.android.com/apk/res/android"
                        android:id="@+id/mapview"
                        android:layout_width="fill_parent"
                        android:layout_height="fill_parent"
                        android:clickable="true"
                        android:apiKey="0bP2YJLhub2rGpXpOtkWFqcV3Qm5SS11Bl-cFyQ"
                />

            package com.example.gpstest;

    import java.util.ArrayList;

    import android.app.AlertDialog;
    import android.content.Context;
    import android.graphics.drawable.Drawable;

    import com.google.android.maps.ItemizedOverlay;
    import com.google.android.maps.OverlayItem;

    public class CustomItemizedOverlay extends ItemizedOverlay<OverlayItem> {
        private ArrayList<OverlayItem> mapOverlays = new ArrayList<OverlayItem>();
        private Context mcontext;

        public CustomItemizedOverlay(Drawable defaultMarker) {

            super(boundCenterBottom(defaultMarker));

            // TODO Auto-generated constructor stub
        }

        public CustomItemizedOverlay(Drawable defaultMarker, Context context) {
            super(boundCenterBottom(defaultMarker));
            mcontext = context;
        }

        @Override
        protected OverlayItem createItem(int i) {
            // TODO Auto-generated method stub
            return mapOverlays.get(i);
        }

        @Override
        public int size() {
            // TODO Auto-generated method stub
            return mapOverlays.size();
        }

        @Override
        protected boolean onTap(int index) {
            OverlayItem item = mapOverlays.get(index);
            AlertDialog.Builder dialog = new AlertDialog.Builder(mcontext);
            dialog.setTitle(item.getTitle());
            dialog.setMessage(item.getSnippet());
            dialog.show();
            return true;
        }

        public void addOverlay(OverlayItem overlay) {
            mapOverlays.add(overlay);
            populate();
        }

    }

4 个答案:

答案 0 :(得分:1)

你可以做一件事......只需在活动开始时自动启动你的WiFi

 protected void onStart() {
         // TODO Auto-generated method stub
         super.onStart();

           WifiManager wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE);
             if (wifiManager != null) {

             wifiManager.setWifiEnabled(true);
             }
        } 

将权限放入清单文件中:

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"  />
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />

    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />

答案 1 :(得分:0)

这个怎么样:http://sourceforge.net/projects/libwlocate/

该库通过单一界面执行GPS和WLAN定位,易于使用。当然还有Android源和端口。

答案 2 :(得分:0)

如果你想先用先到先得,那么你可以为wifi和网络做两个独立的位置监听器。就像下面一样。

try
        {
            gps_enabled = lm.isProviderEnabled(LocationManager.GPS_PROVIDER);
            network_enabled = lm.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
        }catch(Exception ex){
            ex.printStackTrace();
        }

    //don't start listeners if no provider is enabled
    if(!gps_enabled && !network_enabled)
        return false;

    if(gps_enabled)
        lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locationListenerGps);
    if(network_enabled)
        lm.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListenerNetwork);

然后你可以听两个听众jus

LocationListener locationListenerGps = new LocationListener() {
        public void onLocationChanged(Location location) {
            //          timer1.cancel();
            Log.d("from", "GPS");
            locationResult.gotLocation(location);
            lm.removeUpdates(this);
            lm.removeUpdates(locationListenerNetwork);
        }
        public void onProviderDisabled(String provider) {}
        public void onProviderEnabled(String provider) {}
        public void onStatusChanged(String provider, int status, Bundle extras) {}
    };

LocationListener locationListenerNetwork = new LocationListener() {
    public void onLocationChanged(Location location) {
        //          timer1.cancel();
        Log.d("from", "NETWORK");
        locationResult.gotLocation(location);
        lm.removeUpdates(this);
        lm.removeUpdates(locationListenerGps);
    }
    public void onProviderDisabled(String provider) {}
    public void onProviderEnabled(String provider) {}
    public void onStatusChanged(String provider, int status, Bundle extras) {}
};

这就是你如何制作先到先得的位置监听器。希望这有帮助。

答案 3 :(得分:0)

尝试此代码..它适用于 Network_Provider

protected void onCreate(Bundle savedInstanceState){

    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    boolean answer;
    answer=isOnline();
    System.out.println(answer);

    if(answer){
    LocationManager L = (LocationManager) getSystemService(LOCATION_SERVICE); 
    if (L.isProviderEnabled(LocationManager.NETWORK_PROVIDER)) {
    gps_loc();
    } else
    {       
    showSettingsAlert();        
    }
}

else
{
    Toast.makeText(getApplicationContext(), "Check your Internet Connection",Toast.LENGTH_SHORT).show();    
}

}

public boolean isOnline(){

ConnectivityManager cm =
    (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);

NetworkInfo netInfo = cm.getActiveNetworkInfo();

if (netInfo != null && netInfo.isConnectedOrConnecting()) {
    return true;

}
return false;

}

public void showSettingsAlert(){
    new AlertDialog.Builder(this)
    .setIcon(android.R.drawable.ic_dialog_alert)
    .setTitle("GPS")
    .setMessage("GPS is not enabled. Do you want to go to settings menu?")
    .setPositiveButton("Yes", new DialogInterface.OnClickListener()
{
    public void onClick(DialogInterface dialog, int which) {
        Intent I = new Intent( 
                    android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS);  
            startActivity(I); 
            Toast.makeText(getApplicationContext(),"Tick Use_wifi settings and click back button", Toast.LENGTH_LONG).show();

    }

})
.setNegativeButton("No", null)
.show();
}
void gps_loc()
{
    LocationManager lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
//  LocationListener ll = new mylocationlistener();
    Location location=lm.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
     if (location != null) {
            Log.d("LOCATION CHANGED", location.getLatitude() + "");
            Log.d("LOCATION CHANGED", location.getLongitude() + "");
            Toast.makeText(getApplicationContext(),"", Toast.LENGTH_SHORT).show();
              double lat=location.getLatitude();
              double lng=location.getLongitude();
              List<Address> addresses = null;
                try {
                    addresses = new Geocoder(getApplicationContext(),Locale.getDefault()).getFromLocation(lat,lng, 1);
                } catch (IOException e) {
                    e.printStackTrace();
                }

                Address addr= addresses.get(0);

              Country=addr.getCountryName();
               City=addr.getLocality();
               area=addr.getFeatureName();
               pincode=addr.getPostalCode();
                currentloc=area+" ,"+City+" ,"+Country;

                Toast.makeText(getApplicationContext(),currentloc, Toast.LENGTH_SHORT).show();

            }  
}