package com.diandi.demo; import android.app.Activity; import android.app.Application; import android.app.NotificationManager; import android.content.SharedPreferences; import android.media.MediaPlayer; import android.preference.PreferenceManager; import com.baidu.location.BDLocation; import com.baidu.location.BDLocationListener; import com.baidu.location.LocationClient; import com.baidu.mapapi.SDKInitializer; import com.diandi.demo.R; import com.diandi.demo.io.ACache; import com.diandi.demo.model.diandi.DianDi; import com.diandi.demo.util.ActivityManagerUtils; import com.diandi.demo.util.CollectionUtils; import com.diandi.demo.util.ImageLoadOptions; import com.diandi.demo.util.L; import com.diandi.demo.util.SharePreferenceUtil; import java.util.HashMap; import java.util.Map; import cn.bmob.im.BmobChat; import cn.bmob.im.BmobUserManager; import cn.bmob.im.bean.BmobChatUser; import cn.bmob.im.db.BmobDB; import cn.bmob.im.util.BmobLog; import cn.bmob.v3.datatype.BmobGeoPoint; /** * ******************************************************************************* * ********* Author : klob(kloblic@gmail.com) . * ********* Date : 2014-11-29 . * ********* Time : 11:46 . * ********* Project name : Diandi1.18 . * ********* Version : 1.0 * ********* Copyright @ 2014, klob, All Rights Reserved * ******************************************************************************* */ public class CustomApplication extends Application { public final static String TAG = "CustomApplication"; public final static String PREFERENCE_NAME = "_sharedinfo"; public static CustomApplication mInstance; public static BmobGeoPoint lastPoint = null;// 上一次定位到的经纬度 public final String PREF_LONGTITUDE = "longtitude";// 经度 public final String PREF_LATITUDE = "latitude";// 纬度 public LocationClient mLocationClient; public MyLocationListener mMyLocationListener; public SharePreferenceUtil mSpUtil; // 单例模式,才能及时返回数据 public NotificationManager mNotificationManager; public MediaPlayer mMediaPlayer; private DianDi currentDianDi; private String longtitude = ""; private String latitude = ""; private ACache mACache; private Map<String, BmobChatUser> contactList = new HashMap<String, BmobChatUser>(); public static CustomApplication getInstance() { return mInstance; } @Override public void onCreate() { super.onCreate(); BmobChat.DEBUG_MODE = true; mInstance = this; init(); } public ACache getCache() { if (mACache == null) { return ACache.get(getApplicationContext()); } else { return mACache; } } public DianDi getCurrentDianDi() { return currentDianDi; } public void setCurrentDianDi(DianDi dianDi) { this.currentDianDi = dianDi; } public void addActivity(Activity ac) { ActivityManagerUtils.getInstance().addActivity(ac); } public void exit() { ActivityManagerUtils.getInstance().removeAllActivity(); } public Activity getTopActivity() { return ActivityManagerUtils.getInstance().getTopActivity(); } private void init() { mMediaPlayer = MediaPlayer.create(this, R.raw.notify); mNotificationManager = (NotificationManager) getSystemService(android.content.Context.NOTIFICATION_SERVICE); ImageLoadOptions.initImageLoader(getApplicationContext()); // 若用户登陆过,则先从好友数据库中取出好友list存入内存中 if (BmobUserManager.getInstance(getApplicationContext()) .getCurrentUser() != null) { // 获取本地好友user list到内存,方便以后获取好友list contactList = CollectionUtils.list2map(BmobDB.create( getApplicationContext()).getContactList()); } initBaidu(); } /** * 初始化百度相关sdk initBaidumap */ private void initBaidu() { // 初始化地图Sdk SDKInitializer.initialize(this); // 初始化定位sdk initBaiduLocClient(); } /** * 初始化百度定位sdk */ private void initBaiduLocClient() { mLocationClient = new LocationClient(this.getApplicationContext()); mMyLocationListener = new MyLocationListener(); mLocationClient.registerLocationListener(mMyLocationListener); mLocationClient.start(); } public synchronized SharePreferenceUtil getSpUtil() { if (mSpUtil == null) { String currentId = BmobUserManager.getInstance( getApplicationContext()).getCurrentUserObjectId(); String sharedName = PREFERENCE_NAME; mSpUtil = new SharePreferenceUtil(this, sharedName); } return mSpUtil; } public NotificationManager getNotificationManager() { if (mNotificationManager == null) mNotificationManager = (NotificationManager) getSystemService(android.content.Context.NOTIFICATION_SERVICE); return mNotificationManager; } public synchronized MediaPlayer getMediaPlayer() { if (mMediaPlayer == null) mMediaPlayer = MediaPlayer.create(this, R.raw.notify); return mMediaPlayer; } /** * 获取经度 * * @return */ public String getLongtitude() { SharedPreferences preferences = PreferenceManager .getDefaultSharedPreferences(this); longtitude = preferences.getString(PREF_LONGTITUDE, ""); return longtitude; } public void setLongtitude(String lon) { SharedPreferences preferences = PreferenceManager .getDefaultSharedPreferences(this); SharedPreferences.Editor editor = preferences.edit(); if (editor.putString(PREF_LONGTITUDE, lon).commit()) { longtitude = lon; } } /** * 获取纬度 */ public String getLatitude() { SharedPreferences preferences = PreferenceManager .getDefaultSharedPreferences(this); latitude = preferences.getString(PREF_LATITUDE, ""); return latitude; } /** * 设置维度 */ public void setLatitude(String lat) { SharedPreferences preferences = PreferenceManager .getDefaultSharedPreferences(this); SharedPreferences.Editor editor = preferences.edit(); if (editor.putString(PREF_LATITUDE, lat).commit()) { latitude = lat; } } /** * 获取内存中好友user list * * @return */ public Map<String, BmobChatUser> getContactList() { return contactList; } /** * 设置好友user list到内存中 * * @param contactList */ public void setContactList(Map<String, BmobChatUser> contactList) { if (this.contactList != null) { this.contactList.clear(); } this.contactList = contactList; } /** * 退出登录,清空缓存数据 */ public void logout() { BmobUserManager.getInstance(getApplicationContext()).logout(); setContactList(null); setLatitude(null); setLongtitude(null); } /** * 实现实位回调监听 */ public class MyLocationListener implements BDLocationListener { @Override public void onReceiveLocation(BDLocation location) { // Receive Location L.e(TAG,"getProvince " + location.getProvince()+" getCity " +location.getCity()); double latitude = location.getLatitude(); double longtitude = location.getLongitude(); if (lastPoint != null) { if (lastPoint.getLatitude() == location.getLatitude() && lastPoint.getLongitude() == location.getLongitude()) { BmobLog.i("两次获取坐标相同");// 若两次请求获取到的地理位置坐标是相同的,则不再定位 mLocationClient.stop(); return; } } lastPoint = new BmobGeoPoint(longtitude, latitude); } } }