package com.mfh.comna.bizz.base; import android.content.Intent; import android.content.res.TypedArray; import android.location.Location; import android.location.LocationListener; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.view.KeyEvent; 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.mfh.comna.api.utils.MLog; import com.mfh.comna.location.MfLocationManagerProxy; import butterknife.ButterKnife; /** * Activity基类·定位·动画 * * */ public class BaseActivity extends AppCompatActivity implements AMapLocationListener { private static final String TAG = BaseActivity.class.getSimpleName(); //高德地图定位 private static final int LOCATION_INTERVAL = 2; private LocationManagerProxy mAMapLocationManager; //满分定位 private MfLocationManagerProxy mMfLocationManager; //窗口动画 public static final int ANIM_TYPE_NEW_NONE = -1;//无动画 public static final int ANIM_TYPE_NEW_FLOW = 0;//新流程,底部弹出 protected int activityCloseEnterAnimation; protected int activityCloseExitAnimation; protected int getLayoutResId(){return 0;} protected void initToolBar(){ } protected boolean isAMapLocationEnable(){ return false; } protected boolean isMfLocationEnable(){ return false; } @Override protected void onCreate(Bundle savedInstanceState) { retrieveAnimations(); super.onCreate(savedInstanceState); setContentView(getLayoutResId()); ButterKnife.bind(this); initToolBar(); } @Override protected void onNewIntent(Intent intent) { super.onNewIntent(intent); } @Override protected void onResume() { super.onResume(); if(isAMapLocationEnable()){ initAMapLocation(); } if (isMfLocationEnable()){ initMfLocation(); } } @Override protected void onPause() { super.onPause(); stopAMapLocation(); stopMfLocation(); } @Override protected void onDestroy() { super.onDestroy(); } @Override public void finish() { super.finish(); overridePendingTransition(activityCloseEnterAnimation, activityCloseExitAnimation); } /** * 监听返回--是否退出程序 */ @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK) { // TODO,双击退出应用 } return super.onKeyDown(keyCode, event); } @Override public void onBackPressed() { super.onBackPressed(); } /** * Retrieve the animations set in the theme applied to this activity in the manifest.. * */ private void retrieveAnimations(){ TypedArray activityStyle = getTheme().obtainStyledAttributes(new int[] {android.R.attr.windowAnimationStyle}); int windowAnimationStyleResId = activityStyle.getResourceId(0, 0); activityStyle.recycle(); // Now retrieve the resource ids of the actual animations used in the animation style pointed to by // the window animation resource id. activityStyle = getTheme().obtainStyledAttributes(windowAnimationStyleResId, new int[] {android.R.attr.activityCloseEnterAnimation, android.R.attr.activityCloseExitAnimation}); activityCloseEnterAnimation = activityStyle.getResourceId(0, 0); activityCloseExitAnimation = activityStyle.getResourceId(1, 0); activityStyle.recycle(); } /** * 初始化定位 */ protected void initMfLocation(){ mMfLocationManager = MfLocationManagerProxy.getInstance(this); mMfLocationManager.requestLocationData(LOCATION_INTERVAL * 1000, 15, mfLocationListener); } protected void stopMfLocation(){ if (mMfLocationManager != null) { mMfLocationManager.removeUpdates(mfLocationListener); } mMfLocationManager = null; } private LocationListener mfLocationListener = new LocationListener() { @Override public void onLocationChanged(Location location) { MLog.d(MfLocationManagerProxy.getLocationInfo(location)); //TODO,保存位置信息 MfLocationManagerProxy.saveLocationInfo(BaseActivity.this, location); } @Override public void onStatusChanged(String provider, int status, Bundle extras) { //Provider状态在可用、暂不可用、无服务三个状态之间直接切换时触发此函数 MLog.d(String.format("%s, status:%d", provider, status)); } @Override public void onProviderEnabled(String provider) { //Provider被enable时触发此函数,比如GPS被打开 MLog.d(provider + " enabled"); } @Override public void onProviderDisabled(String provider) { //Provider被disable时触发此函数,比如GPS被关闭 MLog.d(provider + " disabled"); } }; /** * 初始化定位 */ protected void initAMapLocation() { mAMapLocationManager = LocationManagerProxy.getInstance(this); //此方法为每隔固定时间会发起一次定位请求,为了减少电量消耗或网络流量消耗, //注意设置合适的定位时间的间隔,并且在合适时间调用removeUpdates()方法来取消定位请求 //在定位结束后,在合适的生命周期调用destroy()方法 //其中如果间隔时间为-1,则定位只定一次 mAMapLocationManager.requestLocationData( LocationProviderProxy.AMapNetwork, LOCATION_INTERVAL*1000, 15, this); mAMapLocationManager.setGpsEnable(false); } /** * 停止定位,并销毁定位资源 * */ private void stopAMapLocation() { if (mAMapLocationManager != null) { mAMapLocationManager.removeUpdates(this); mAMapLocationManager.destory(); } mAMapLocationManager = null; } @Override public void onLocationChanged(AMapLocation aMapLocation) { if (aMapLocation != null && aMapLocation.getAMapException().getErrorCode() == 0){ // MLog.d("onLocationChanged: " + aMapLocation.toString()); //step 1: save last location info MfLocationManagerProxy.saveLastLocationInfo(BaseActivity.this, aMapLocation.getLatitude(), aMapLocation.getLongitude()); //step 2: query surround subdis //TODO //locatioin failed //location success } } @Override public void onLocationChanged(Location location) { } @Override public void onStatusChanged(String provider, int status, Bundle extras) { } @Override public void onProviderEnabled(String provider) { } @Override public void onProviderDisabled(String provider) { } }