package com.partynetwork.iparty.discover; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import com.amap.api.location.AMapLocation; import com.amap.api.location.AMapLocationListener; import com.amap.api.location.LocationManagerProxy; import com.amap.api.location.LocationProviderProxy; import com.baidu.mobstat.StatService; import com.lidroid.xutils.util.LogUtils; import com.partynetwork.dataprovider.DataProvider.IJsonResultListener; import com.partynetwork.dataprovider.json.NetworkEntity; import com.partynetwork.dataprovider.json.struct.NearBy_nearbyMainRequest; import com.partynetwork.dataprovider.json.struct.NearBy_nearbyMainResponse; import com.partynetwork.dataprovider.util.AMapUtil; import com.partynetwork.iparty.app.AppContext; import com.partynetwork.iparty.dom.OnFlipChangeViewListener; import com.partynetwork.iparty.helper.IntentHelper; import com.partynetwork.iparty.info.NearbyItemInfo; import com.partynetwork.iparty.nearby.NearbyCustomActivity; import com.partynetwork.iparty.nearby.NearbyItemAdapter; import com.partynetwork.myview.mytoast.MenuBottomPop; import android.app.Activity; import android.content.Intent; import android.location.Location; import android.os.Bundle; import android.os.Handler; import android.view.Gravity; import android.view.View; import android.view.ViewGroup; import android.view.View.OnClickListener; import android.view.ViewGroup.LayoutParams; import android.widget.AdapterView; import android.widget.ListView; import android.widget.TextView; import android.widget.Toast; import android.widget.AdapterView.OnItemClickListener; import com.partynetwork.iparty.R; public class DiscoverNearbyActivity extends Activity implements AMapLocationListener, Runnable, IJsonResultListener, OnClickListener,OnItemClickListener { /** 侧滑功能监听 */ private OnFlipChangeViewListener mOnChangeViewListener; // 上下文 private Activity mActivity; /** * 其中的显示附近的人的listview */ private ListView mListView; // listview适配器 public NearbyItemAdapter mNearbyItemAdapter; // 清除确认框 private MenuBottomPop exitPopupWindow; /** * 底部的弹窗 */ private MenuBottomPop menuBottonPop; /* * 更多功能列表 */ private String moreArray[] = new String[] { "全部", "只看女生", "只看男生", "只看其他" }; private String exitArray[] = new String[] { "清除位置信息并退出" }; /** 定位使用 */ private LocationManagerProxy mAMapLocManager = null; /** 用于判断定位超时 */ private AMapLocation aMapLocation; private Handler handler = new Handler(); private Double geoLat, geoLng; // 全部的数据 private List<NearbyItemInfo> mList = new ArrayList<NearbyItemInfo>(); private List<NearbyItemInfo> sList = new ArrayList<NearbyItemInfo>(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(com.partynetwork.iparty.R.layout.nearby); mActivity=this; initView(); initData(); } private void initView() { mListView = (ListView) mActivity.findViewById(R.id.nearby_list); TextView emptyView = new TextView(mActivity); emptyView.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT)); emptyView.setText("定位中,请稍后……"); emptyView.setGravity(Gravity.CENTER); ((ViewGroup) mListView.getParent()).addView(emptyView); mListView.setEmptyView(emptyView); mListView.setOnItemClickListener(this); mActivity.findViewById(R.id.menu_head_left).setOnClickListener(this); mActivity.findViewById(R.id.menu_head_right).setOnClickListener(this); } /** * 初始化数据 */ private void initData() { menuBottonPop = new MenuBottomPop(mActivity, moreArray, clickListener); exitPopupWindow = new MenuBottomPop(mActivity, exitArray, exitClickListener); /******************** 定位功能 */ mAMapLocManager = LocationManagerProxy.getInstance(mActivity); /* * mAMapLocManager.setGpsEnable(false);// * 1.0.2版本新增方法,设置true表示混合定位中包含gps定位,false表示纯网络定位,默认是true Location * API定位采用GPS和网络混合定位方式 * ,第一个参数是定位provider,第二个参数时间最短是5000毫秒,第三个参数距离间隔单位是米,第四个参数是定位监听者 */ mAMapLocManager.requestLocationUpdates( LocationProviderProxy.AMapNetwork, 5000, 10, this); handler.postDelayed(this, 12000);// 设置超过12秒还没有定位到就停止定位 } public void onLocationChanged(Location location) { } @Override public void onProviderDisabled(String arg0) { } @Override public void onProviderEnabled(String arg0) { } @Override public void onStatusChanged(String arg0, int arg1, Bundle arg2) { } /** * * @param parent * @param view * @param position * @param id */ public void onItemClick(AdapterView<?> parent, View view, int position, long id) { IntentHelper.goPersonalCenterActivity(mActivity, sList.get(position) .getUserId()); } @Override public void onClick(View view) { switch (view.getId()) { case R.id.menu_head_left: finish(); break; case R.id.menu_head_right: // 更多 menuBottonPop.showAtLocation(mListView); break; default: break; } } @Override public void onNetworkRequest() { } @Override public void onResultSuccess(NetworkEntity entity) { if (entity.getRequest().getAction() .equals(new NearBy_nearbyMainRequest().getAction())) { NearBy_nearbyMainResponse nResponse = (NearBy_nearbyMainResponse) entity .getResponse(); NearbyItemInfo[] infoArray = nResponse.getDetails(); if (infoArray != null) { mList = Arrays.asList(infoArray); sieving(0); } } } @Override public void onResultFail(String result) { } @Override public void run() { if (aMapLocation == null) { Toast.makeText(mActivity, "12秒内还没有定位成功,停止定位", Toast.LENGTH_SHORT) .show(); stopLocation();// 销毁掉定位 } } /** * 销毁定位 */ private void stopLocation() { if (mAMapLocManager != null) { mAMapLocManager.removeUpdates(this); mAMapLocManager.destory(); } mAMapLocManager = null; } @Override public void onLocationChanged(AMapLocation location) { if (location != null) { this.aMapLocation = location;// 判断超时机制 geoLat = location.getLatitude(); geoLng = location.getLongitude(); String cityCode = ""; String desc = ""; Bundle locBundle = location.getExtras(); if (locBundle != null) { cityCode = locBundle.getString("citycode"); desc = locBundle.getString("desc"); } String str = ("定位成功:(" + geoLng + "," + geoLat + ")" + "\n精 度 :" + location.getAccuracy() + "米" + "\n定位方式:" + location.getProvider() + "\n定位时间:" + AMapUtil.convertToTime(location.getTime()) + "\n城市编码:" + cityCode + "\n位置描述:" + desc + "\n省:" + location.getProvince() + "\n市:" + location.getCity() + "\n区(县):" + location.getDistrict() + "\n区域编码:" + location .getAdCode()); LogUtils.i(str); // 停止定位 stopLocation(); sendRequest(geoLat, geoLng); } } /** * 发送请求 * * @param geoLat * @param geoLat2 */ private void sendRequest(Double geoLat, Double geoLng) { NearBy_nearbyMainRequest request = new NearBy_nearbyMainRequest(); request.setLatitude(geoLat); request.setLongitude(geoLng); request.setUserId(AppContext.getInstance().getLoginUid()); AppContext.getInstance().getmDataProvider() .getJsonFromNetwork(request, this); } /** * 弹出菜单的按钮事件监听 * * @author Administrator * */ private OnClickListener clickListener = new OnClickListener() { public void onClick(View v) { if (v.getTag().equals(moreArray[0])) { sieving(0); } else if (v.getTag().equals(moreArray[1])) { sieving(2); } else if (v.getTag().equals(moreArray[2])) { sieving(1); } else if (v.getTag().equals(moreArray[3])) { sieving(3); } else if (v.getTag().equals(moreArray[4])) { Intent intent = new Intent(mActivity, NearbyCustomActivity.class); mActivity.startActivity(intent); } else if (v.getTag().equals(moreArray[5])) { } else if (v.getTag().equals(moreArray[6])) { exitPopupWindow.showAtLocation(mListView); } menuBottonPop.dismiss(); } }; /** * 筛选显示的数据内容 */ private void sieving(int type) { sList.removeAll(sList); for (int i = 0; i < mList.size(); i++) { switch (type) { case 0: sList.add(mList.get(i)); break; case 1: if (mList.get(i).getUserSex() == 0) { sList.add(mList.get(i)); } break; case 2: if (mList.get(i).getUserSex() == 1) { sList.add(mList.get(i)); } break; case 3: if (mList.get(i).getUserSex() == 2) { sList.add(mList.get(i)); } break; default: break; } } mNearbyItemAdapter = new NearbyItemAdapter(mActivity, sList); mNearbyItemAdapter.notifyDataSetChanged(); mListView.setAdapter(mNearbyItemAdapter); } /** * 弹出菜单的按钮事件监听 * * @author Administrator * */ private OnClickListener exitClickListener = new OnClickListener() { public void onClick(View v) { if (v.getTag().equals(exitArray[0])) { if (mOnChangeViewListener != null) { // 跳到主界面 mOnChangeViewListener.onChangeView(0); } } exitPopupWindow.dismiss(); } }; @Override public void onResume() { super.onResume(); initData(); StatService.onPageStart(mActivity, "NearbyPage"); } @Override public void onPause() { super.onPause(); stopLocation();// 停止定位 StatService.onPageEnd(mActivity, "NearbyPage"); } }