package com.loveplusplus.demo.nearby; import java.util.HashMap; import java.util.Map; import android.app.ListActivity; import android.content.Context; import android.content.Intent; import android.location.Criteria; import android.location.Location; import android.location.LocationListener; import android.location.LocationManager; import android.os.Bundle; import android.util.Log; import android.view.Menu; import android.view.MenuItem; import com.android.volley.RequestQueue; import com.android.volley.Response; import com.android.volley.VolleyError; import com.android.volley.toolbox.ImageLoader; import com.android.volley.toolbox.Volley; import com.baidu.location.BDLocation; import com.baidu.location.BDLocationListener; import com.baidu.location.GeofenceClient; import com.baidu.location.LocationClient; import com.baidu.location.LocationClientOption; import com.baidu.location.LocationClientOption.LocationMode; import com.loveplusplus.demo.nearby.message.NearbyInfoResponse; import com.loveplusplus.demo.nearby.util.PhoneUtil; public class MainActivity extends ListActivity { protected static final String TAG = "MainActivity"; private RequestQueue reqQueue; private ImageLoader imageLoader; public static final String BASE_URL = "http://192.168.0.9:8080/NearbyServerDemo"; public static LocationClient mLocationClient; public GeofenceClient mGeofenceClient; private MyLocationListener mMyLocationListener; @Override protected void onCreate(Bundle savedInstanceState) { boolean first = getSharedPreferences("userinfo", Context.MODE_PRIVATE).getBoolean("first", false); if (!first) { Intent intent = new Intent(this, LoginActivity.class); startActivity(intent); } super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); reqQueue = Volley.newRequestQueue(this); imageLoader = new ImageLoader(reqQueue, new BitmapLruCache()); //百度地图定位 mLocationClient = new LocationClient(getApplicationContext());//是否有问题?? mMyLocationListener = new MyLocationListener(); mLocationClient.registerLocationListener(mMyLocationListener); LocationClientOption option = new LocationClientOption(); option.setLocationMode(LocationMode.Hight_Accuracy);// 设置定位模式 option.setCoorType("bd09ll");// 返回的定位结果是百度经纬度,默认值gcj02 option.setIsNeedAddress(true);// 返回的定位结果包含地址信息 option.setNeedDeviceDirect(true);// 返回的定位结果包含手机机头的方向 mLocationClient.setLocOption(option); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.main, menu); return super.onCreateOptionsMenu(menu); } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.action_settings: //getLocation(this); getLoc(); return true; default: return super.onOptionsItemSelected(item); } } private void requestServer(Map<String, String> map) { GsonRequest<NearbyInfoResponse> jr = new GsonRequest<NearbyInfoResponse>(MainActivity.BASE_URL+"/api/list", NearbyInfoResponse.class, map, new Response.Listener<NearbyInfoResponse>() { @Override public void onResponse(NearbyInfoResponse response) { Log.d(TAG, response.toString()); MyListAdapter adapter = new MyListAdapter(MainActivity.this, response.getList(), imageLoader); setListAdapter(adapter); } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { Log.d(TAG, error.toString()); } }); reqQueue.add(jr); } public void getLoc(){ // 开始定位 mLocationClient.start(); if (mLocationClient != null && mLocationClient.isStarted()) { mLocationClient.requestLocation(); Log.d(TAG, "locClient is started"); } else { Log.d(TAG, "locClient is null or not started"); } } // Get the Location by GPS or WIFI public void getLocation(Context context) { LocationManager locationManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE); // 设置Criteria的信息 Criteria criteria = new Criteria(); // 经度要求 criteria.setAccuracy(Criteria.ACCURACY_FINE); criteria.setAltitudeRequired(false); criteria.setBearingRequired(false); criteria.setCostAllowed(false); criteria.setPowerRequirement(Criteria.POWER_LOW); // 根据设置的Criteria对象,获取最符合此标准的provider对象 // 取得效果做好的criteria String currentProvider = locationManager.getBestProvider(criteria, true); Log.d(TAG, "currentProvider: " + currentProvider); // 根据当前provider对象获取最后一次位置信息 Location currentLocation = locationManager.getLastKnownLocation(currentProvider); if (currentLocation == null) { locationManager.requestLocationUpdates(currentProvider, 0, 0, new getGpsLocationListner()); } // 直到获得最后一次位置信息为止,如果未获得最后一次位置信息,则显示默认经纬度 // 每隔10秒获取一次位置信息 while (true) { currentLocation = locationManager.getLastKnownLocation(currentProvider); if (currentLocation != null) { Log.d(TAG, "Latitude: " + currentLocation.getLatitude()); Log.d(TAG, "location: " + currentLocation.getLongitude()); Map<String, String> map = new HashMap<String, String>(); map.put("latitude", String.valueOf(currentLocation.getLatitude())); map.put("longitude", String.valueOf(currentLocation.getLongitude())); map.put("user_id", PhoneUtil.getImei(MainActivity.this)); requestServer(map); break; } else { Log.d(TAG, "Latitude: " + 0); Log.d(TAG, "location: " + 0); } try { Thread.sleep(10000); } catch (InterruptedException e) { Log.e(TAG, e.getMessage()); } } } public class MyLocationListener implements BDLocationListener { @Override public void onReceiveLocation(BDLocation location) { //Receive Location StringBuffer sb = new StringBuffer(256); sb.append("\nlatitude : "); sb.append(location.getLatitude()); sb.append("\nlontitude : "); sb.append(location.getLongitude()); Log.d(TAG, "Latitude: " + location.getLatitude()); Log.d(TAG, "location: " + location.getLongitude()); Map<String, String> map = new HashMap<String, String>(); map.put("latitude", String.valueOf(location.getLatitude())); map.put("longitude", String.valueOf(location.getLongitude())); map.put("user_id", PhoneUtil.getImei(MainActivity.this)); requestServer(map); Log.i(TAG, sb.toString()); } @Override public void onReceivePoi(BDLocation arg0) { } } private class getGpsLocationListner implements LocationListener { @Override public void onLocationChanged(Location location) { Map<String, String> map = new HashMap<String, String>(); map.put("latitude", String.valueOf(location.getLatitude())); map.put("longitude", String.valueOf(location.getLongitude())); map.put("user_id", PhoneUtil.getImei(MainActivity.this)); requestServer(map); } public void onProviderDisabled(String provider) { } public void onProviderEnabled(String provider) { } public void onStatusChanged(String provider, int status, Bundle extras) { } } @Override protected void onStop() { super.onStop(); reqQueue.cancelAll(this); } }