0

我是 android 新手。我从互联网上获得了一个教程来查找位置地址。当我在我的真实设备中使用此代码时。它是预先停止的。也许我可能会在我的代码中的某个地方犯一些错误。如果有人请建议我适当的解决方案,以便我可以在我的设备中获取地址。活动代码是...

GPSTracker.java 的代码

public class GPSTracker extends Service implements LocationListener {

private final Context mContext;


// flag for GPS status
boolean isGPSEnabled = false;

// flag for network status
boolean isNetworkEnabled = false;

// flag for GPS status
boolean canGetLocation = false;

Location location; // location
double latitude; // latitude
double longitude; // longitude


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

// The minimum time between updates in milliseconds
private static final long MIN_TIME_BW_UPDATES = 1000 * 60 * 1; // 1 minute
public static final Double val =  10.0;




// Declaring a Location Manager
protected LocationManager locationManager;

public GPSTracker(Context context) {
    this.mContext = context;
    //getLocation();
}

public Location getLocation() {
    try {
        locationManager = (LocationManager) mContext
                .getSystemService(LOCATION_SERVICE);

        // getting GPS status
        //isGPSEnabled = locationManager
                //.isProviderEnabled(LocationManager.GPS_PROVIDER);

        // getting network status
        isNetworkEnabled = locationManager
                .isProviderEnabled(LocationManager.NETWORK_PROVIDER);

        if (!isGPSEnabled || !isNetworkEnabled) {
            // no network provider is enabled
            //Toast.makeText(getApplicationContext(), "no gps or network found", Toast.LENGTH_SHORT).show();
        } else {
            this.canGetLocation = true;
            if (isNetworkEnabled) {
                if (location == null) {
                    Criteria criteria = new Criteria();
                    criteria.setAccuracy(Criteria.ACCURACY_FINE);  
                    // 高精度  
                    criteria.setAltitudeRequired(false);  
                    criteria.setBearingRequired(false);  
                    criteria.setCostAllowed(true);   
                    criteria.setPowerRequirement(Criteria.POWER_LOW);  
                    String provider = locationManager.getBestProvider(criteria, true);
                locationManager.requestLocationUpdates(
                        provider,
                        MIN_TIME_BW_UPDATES,
                        MIN_DISTANCE_CHANGE_FOR_UPDATES, this);
                Log.d("Network", "Network");
                if (locationManager != null) {
                    location = locationManager
                            .getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
                    if (location != null) {
                        latitude = location.getLatitude();
                        longitude = location.getLongitude();
                    }
                }
                }
            }
            // if GPS Enabled get lat/long using GPS Services
            /*if (isGPSEnabled) {
                if (location == null) {
                    locationManager.requestLocationUpdates(
                            LocationManager.GPS_PROVIDER,
                            MIN_TIME_BW_UPDATES,
                            MIN_DISTANCE_CHANGE_FOR_UPDATES, this);
                    Log.d("GPS Enabled", "GPS Enabled");
                    if (locationManager != null) {
                        location = locationManager
                                .getLastKnownLocation(LocationManager.GPS_PROVIDER);
                        if (location != null) {
                            latitude = location.getLatitude();
                            longitude = location.getLongitude();
                        }
                    }
                }
            }*/
        }

    } catch (Exception e) {
        e.printStackTrace();
    }

    return location;
}

/**
 * Stop using GPS listener
 * Calling this function will stop using GPS in your app
 * */
public void stopUsingGPS(){
    if(locationManager != null){
        locationManager.removeUpdates(GPSTracker.this);
    }       
}

/**
 * Function to get latitude
 * */
public double getLatitude(){
    if(location != null){
        latitude = location.getLatitude();
    }

    // return latitude
    return latitude;
}

/**
 * Function to get longitude
 * */
public double getLongitude(){
    if(location != null){
        longitude = location.getLongitude();
    }

    // return longitude
    return longitude;
}

/**
 * Function to check GPS/wifi enabled
 * @return boolean
 * */
public boolean canGetLocation() {
    return this.canGetLocation;
}

/**
 * Function to show settings alert dialog
 * On pressing Settings button will lauch Settings Options
 * */
public void showSettingsAlert(){
    AlertDialog.Builder alertDialog = new AlertDialog.Builder(mContext);

    // Setting Dialog Title
    alertDialog.setTitle("GPS is settings");

    // Setting Dialog Message
    alertDialog.setMessage("GPS is not enabled. Do you want to go to settings menu?");

    // On pressing Settings button
    alertDialog.setPositiveButton("Settings", new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog,int which) {
            Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
            mContext.startActivity(intent);
        }
    });

    // on pressing cancel button
    alertDialog.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int which) {
        dialog.cancel();
        }
    });

    // Showing Alert Message
    alertDialog.show();
}




@Override
public void onLocationChanged(Location location) {
    //makeUseOfNewLocation(location);
}

@Override
public void onProviderDisabled(String provider) {
}

@Override
public void onProviderEnabled(String provider) {
}

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

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

}

GetLocationTask.java 的代码

public class GetLocationTask extends AsyncTask<Void, Void, Void> {
JSONObject jsonObject;
String address;
Address[] addrs;

public GetLocationTask(String a, Address[] addrs) {
    this.address = a;
    this.addrs = addrs;
}

@Override
protected Void doInBackground(Void... params) {
    getLocationInfo(address);
    return null;
}

private void getLocationInfo(String address) {

    String query = "http://maps.google.com/maps/api/geocode/json?address=" + address.replaceAll(" ","%20")
            + "&sensor=false";
    Address addr = null;
    HttpClient client = new DefaultHttpClient();
    HttpGet httpGet = new HttpGet(query);

    HttpResponse response;
    StringBuilder stringBuilder = new StringBuilder();

    try {
        response = client.execute(httpGet);
        if (response.getStatusLine().getStatusCode() == 200) {

            HttpEntity entity = response.getEntity();
            InputStream stream = entity.getContent();
            int b;
            while ((b = stream.read()) != -1) {
                stringBuilder.append((char) b);
            }
            try {
                jsonObject = new JSONObject(stringBuilder.toString());
                addr = new Address(Locale.getDefault());
                JSONArray addrComp = ((JSONArray)jsonObject.get("results")).getJSONObject(0)
                        .getJSONArray("address_components");
                String locality = ((JSONArray)((JSONObject)addrComp.get(0)).get("types")).getString(0);
                if (locality.compareTo("locality") == 0) {
                    locality = ((JSONObject)addrComp.get(0)).getString("long_name");
                    addr.setLocality(locality);
                }
                String adminArea = ((JSONArray)((JSONObject)addrComp.get(2)).get("types")).getString(0);
                if (adminArea.compareTo("administrative_area_level_1") == 0) {
                    adminArea = ((JSONObject)addrComp.get(2)).getString("long_name");
                    addr.setAdminArea(adminArea);
                }
                String country = ((JSONArray)((JSONObject)addrComp.get(3)).get("types")).getString(0);
                if (country.compareTo("country") == 0) {
                    country = ((JSONObject)addrComp.get(3)).getString("long_name");
                    addr.setCountryName(country);
                }
            } catch (JSONException e) {
                e.printStackTrace();
            }
            Double lon = Double.valueOf(0);
            Double lat = Double.valueOf(0);

            try {

                lon = ((JSONArray)jsonObject.get("results")).getJSONObject(0)
                    .getJSONObject("geometry").getJSONObject("location")
                    .getDouble("lng");

                lat = ((JSONArray)jsonObject.get("results")).getJSONObject(0)
                    .getJSONObject("geometry").getJSONObject("location")
                    .getDouble("lat");

            } catch (JSONException e) {
                e.printStackTrace();
            }
            addr.setLatitude(lat);
            addr.setLongitude(lon);
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
    addrs[0] = addr;

}

MainActivity.java 的代码

public class Act1 extends Activity{
 TextView loc,loc2;
 GPSTracker gps;
 Location location;
 String mAddress="";
 Criteria criteria;
 String providername="";
 String device_id="";
 String ph="";
 double lat,lon;
 int lac=0,cid=0;
 String address2="";
 String MyAddress="";
 protected LocationManager locationManager;

 public void onCreate(Bundle b){
     super.onCreate(b);
    setContentView(R.layout.main);
    loc=(TextView)findViewById(R.id.loc);
    loc2=(TextView)findViewById(R.id.loc2);

    gps=new GPSTracker(getApplicationContext());
    location=gps.getLocation();



    if (gps.latitude != 0 || gps.longitude != 0){

        Act1.getFromLocation(gps.getLatitude(), gps.getLongitude(), 10);

    for(int i=0;i<Act1.getFromLocation(gps.getLatitude(), gps.getLongitude(), 10).size();i++){

          MyAddress+=Act1.getFromLocation(gps.getLatitude(), gps.getLongitude(), 10).get(i).toString();

        }
    }

    loc.setText(MyAddress);

    /*try {
          Process process = Runtime.getRuntime().exec("logcat -d");
          BufferedReader bufferedReader = new BufferedReader(
          new InputStreamReader(process.getInputStream()));

          StringBuilder log=new StringBuilder();
          String line;
          while ((line = bufferedReader.readLine()) != null) {
            log.append(line);
          }

          loc2.setText(log.toString());
        } catch (IOException e) {
            e.printStackTrace();
        }
     */ 
 }
 public static List<Address> getFromLocation(double lat, double lng, int maxResult){

        String address = String.format(Locale.ENGLISH,"http://maps.googleapis.com/maps/api/geocode/json?latlng=%1$f,%2$f&sensor=true&language="+Locale.getDefault().getCountry(), lat, lng);
        HttpGet httpGet = new HttpGet(address);
        HttpClient client = new DefaultHttpClient();
        HttpResponse response;
        StringBuilder stringBuilder = new StringBuilder();

        List<Address> retList = null;

        try {
            response = client.execute(httpGet);
            HttpEntity entity = response.getEntity();
            InputStream stream = entity.getContent();
            int b;
            while ((b = stream.read()) != -1) {
                stringBuilder.append((char) b);
            }

            JSONObject jsonObject = new JSONObject();
            jsonObject = new JSONObject(stringBuilder.toString());


            retList = new ArrayList<Address>();


            if("OK".equalsIgnoreCase(jsonObject.getString("status"))){
                JSONArray results = jsonObject.getJSONArray("results");
                for (int i=0;i<results.length();i++ ) {
                    JSONObject result = results.getJSONObject(i);
                    String indiStr = result.getString("formatted_address");
                    Address addr = new Address(Locale.getDefault());
                    addr.setAddressLine(0, indiStr);
                    retList.add(addr);
                }
            }


        } catch (ClientProtocolException e) {
            Log.e(Act1.class.getName(), "Error calling Google geocode webservice.", e);
        } catch (IOException e) {
            Log.e(Act1.class.getName(), "Error calling Google geocode webservice.", e);
        } catch (JSONException e) {
            Log.e(Act1.class.getName(), "Error parsing Google geocode webservice response.", e);
        }

        return retList;
    }


}

我已经在清单中使用了访问精细位置和互联网的权限。在模拟器中它什么也没显示,但它强制停止了它的设备

4

0 回答 0