package com.aiyou; import java.io.File; import java.text.SimpleDateFormat; import java.util.Locale; import android.content.Context; import android.content.Intent; import android.graphics.Bitmap; import android.graphics.Rect; import android.hardware.Sensor; import android.hardware.SensorEvent; import android.hardware.SensorEventListener; import android.hardware.SensorManager; import android.net.Uri; import android.os.Bundle; import android.view.View; import android.widget.Toast; import com.aiyou.utils.AiYouManager; import com.aiyou.utils.SwitchManager; import com.aiyou.utils.filecache.FileManager; import com.aiyou.utils.http.HttpManager; import com.aiyou.utils.thread.ThreadUtils; import com.umeng.analytics.MobclickAgent; import com.umeng.fb.FeedbackAgent; import com.umeng.message.PushAgent; import external.SwipeBackLayout.SwipeBackLayout; import external.SwipeBackLayout.app.SwipeBackActivity; public class BaseActivity extends SwipeBackActivity implements SensorEventListener { /** * 滑动结束Activity的布局 */ private SwipeBackLayout mSwipeBackLayout; // 传感器对象 private Sensor mSensor; // 传感器管理者 private SensorManager mSensorManager; // 坐标 private float mLastX = 0; private float mLastY = 0; private float mLastZ = 0; // 时间阀值 private static final int UPDATE_INTERVAL_TIME = 100; // 速度阀值 private static final int SPEED_SHRESHOLD = 2000; // 最后时间 private long mLastDate = 0; private boolean mFlagRelease = true; /** * 友盟推送 */ PushAgent mPushAgent; /** * 友盟用户反馈 */ static FeedbackAgent mFeedbackAgent; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); /** * 滑动结束Activity的布局 */ mSwipeBackLayout = getSwipeBackLayout(); // 实例化对象 mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE); mSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER); /** * 如果不调用此方法,将会导致按照"几天不活跃"条件来推送失效。 */ mPushAgent = AiYouApplication.getInstance().mPushAgent; mPushAgent.onAppStart(); } @Override protected void onResume() { super.onResume(); initSwipeOut(); // 友盟应用统计 MobclickAgent.onResume(this); if (SwitchManager.getInstance(this).isShakeShareEnabled()) { // 注册 mSensorManager.registerListener(this, mSensor, SensorManager.SENSOR_DELAY_GAME); } } public void initSwipeOut() { int edge = SwitchManager.getInstance(getBaseContext()).getSwipeOut(); if (edge == SwitchManager.SWIPE_CLOSE) { mSwipeBackLayout.setEnableGesture(false); } else { mSwipeBackLayout.setEnableGesture(true); if (edge == SwitchManager.SWIPE_LEFT) { mSwipeBackLayout.setEdgeTrackingEnabled(SwipeBackLayout.EDGE_LEFT); } else if (edge == SwitchManager.SWIPE_RIGHT) { mSwipeBackLayout.setEdgeTrackingEnabled(SwipeBackLayout.EDGE_RIGHT); } else { mSwipeBackLayout.setEdgeTrackingEnabled(SwipeBackLayout.EDGE_LEFT | SwipeBackLayout.EDGE_RIGHT); } } } @Override protected void onPause() { super.onPause(); // 友盟应用统计 MobclickAgent.onPause(this); // 停止注册 try { mSensorManager.unregisterListener(this); } catch (Exception e) { e.printStackTrace(); } } public void setRelease(boolean flag) { mFlagRelease = flag; } @Override protected void onDestroy() { super.onDestroy(); if (mFlagRelease) { HttpManager.getInstance(this).disconnect(this); ThreadUtils.shutDown(); } } @Override public void onSensorChanged(SensorEvent event) { // 获取当前时间 long currentDate = System.currentTimeMillis(); // 时间变化 long timeDate = currentDate - mLastDate; // 如果时间间隔小于时间阀值 if (timeDate < UPDATE_INTERVAL_TIME) { return; } // 当前时间赋值给最后时间 mLastDate = currentDate; // 获得当前的坐标x,y,z float x = event.values[0]; float y = event.values[1]; float z = event.values[2]; // 获得x,y,z的变化值 float deltaX = x - mLastX; float deltaY = y - mLastY; float deltaZ = z - mLastZ; // 将现在的坐标变为last坐标 mLastX = x; mLastY = y; mLastZ = z; // 达到速度阀值,发出振动 double speed = Math.sqrt(deltaX * deltaX + deltaY * deltaY + deltaZ * deltaZ) / timeDate * 10000; if (speed > SPEED_SHRESHOLD) { share(); } } @Override public void onAccuracyChanged(Sensor sensor, int accuracy) { } /** * 分享 */ private void share() { AiYouManager.getInstance(this).vibrate(500); Bitmap bmp = getSnapshot(); File file = saveBmp(bmp); if (file != null) { Uri uri = Uri.fromFile(file); Intent intent = new Intent(Intent.ACTION_SEND); intent.setType("image/jpeg"); intent.putExtra(Intent.EXTRA_STREAM, uri); startActivity(Intent.createChooser(intent, "来自" + getResources().getString(R.string.app_name) + "的分享")); } else { Toast.makeText(this, "分享失败 ", Toast.LENGTH_SHORT).show(); } } /** * 获取屏幕截图 * * @return */ private Bitmap getSnapshot() { View view = getWindow().getDecorView(); view.setDrawingCacheEnabled(true); Bitmap bmp = view.getDrawingCache(); // 获取状态栏高度 Rect frame = new Rect(); getWindow().getDecorView().getWindowVisibleDisplayFrame(frame); int statusBarHeight = frame.top; try { bmp = Bitmap.createBitmap(bmp, 0, statusBarHeight, bmp.getWidth(), bmp.getHeight() - statusBarHeight); } catch (OutOfMemoryError e) { e.printStackTrace(); } view.setDrawingCacheEnabled(false); return bmp; } /** * 将图片保存到本地 * * @param bmp * @return */ private File saveBmp(Bitmap bmp) { String dir = FileManager.getDirectory(FileManager.DIR_SNAPSHOT); // 注意HH:24小时制;hh:12小时制 SimpleDateFormat sDateFormat = new SimpleDateFormat("yyyyMMddHHmmss", Locale.getDefault()); String fileName = sDateFormat.format(new java.util.Date()) + FileManager.BMP_SUFFIX; boolean result = FileManager.saveBmpToSd(bmp, dir, fileName); if (result) { Toast.makeText(this, "截图已保存:" + dir + "/" + fileName, Toast.LENGTH_SHORT).show(); } else { Toast.makeText(this, "保存截图失败", Toast.LENGTH_SHORT).show(); return null; } return new File(dir + "/" + fileName); } }