/* * 官网地站:http://www.ShareSDK.cn * 技术支持QQ: 4006852216 * 官方微信:ShareSDK (如果发布新版本的话,我们将会第一时间通过微信将版本更新内容推送给您。如果使用过程中有任何问题,也可以通过微信与我们取得联系,我们将会在24小时内给予回复) * * Copyright (c) 2013年 ShareSDK.cn. All rights reserved. */ package cn.sharesdk.onekeyshare; import static cn.sharesdk.framework.utils.R.*; import android.app.Activity; import android.content.Context; import android.hardware.Sensor; import android.hardware.SensorEvent; import android.hardware.SensorEventListener; import android.hardware.SensorManager; import android.util.FloatMath; import android.view.Window; import android.widget.ImageView; import android.widget.Toast; import android.widget.ImageView.ScaleType; import cn.sharesdk.framework.FakeActivity; /** 摇一摇启动分享的例子 */ public class Shake2Share extends FakeActivity implements SensorEventListener { // 检测的时间间隔 private static final int UPDATE_INTERVAL = 100; // 摇晃检测阈值,决定了对摇晃的敏感程度,越小越敏感 private static final int SHAKE_THRESHOLD = 1500; private OnShakeListener listener; private SensorManager mSensorManager; private long mLastUpdateTime; private float mLastX; private float mLastY; private float mLastZ; private boolean shaken; public void setOnShakeListener(OnShakeListener listener) { this.listener = listener; } public void setActivity(Activity activity) { super.setActivity(activity); int resId = getBitmapRes(activity, "ssdk_oks_shake_to_share_back"); if (resId > 0) { activity.setTheme(android.R.style.Theme_Dialog); activity.requestWindowFeature(Window.FEATURE_NO_TITLE); Window win = activity.getWindow(); win.setBackgroundDrawableResource(resId); } } public void onCreate() { startSensor(); int resId = getBitmapRes(activity, "ssdk_oks_yaoyiyao"); if (resId > 0) { ImageView iv = new ImageView(activity); iv.setScaleType(ScaleType.CENTER_INSIDE); iv.setImageResource(resId); activity.setContentView(iv); } resId = getStringRes(activity, "shake2share"); if (resId > 0) { Toast.makeText(activity, resId, Toast.LENGTH_SHORT).show(); } } private void startSensor() { mSensorManager = (SensorManager) activity.getSystemService(Context.SENSOR_SERVICE); if (mSensorManager == null) { throw new UnsupportedOperationException(); } Sensor sensor = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER); if (sensor == null) { throw new UnsupportedOperationException(); } boolean success = mSensorManager.registerListener(this, sensor, SensorManager.SENSOR_DELAY_GAME); if (!success) { throw new UnsupportedOperationException(); } } public void onDestroy() { stopSensor(); } private void stopSensor() { if (mSensorManager != null) { mSensorManager.unregisterListener(this); mSensorManager = null; } } public void onSensorChanged(SensorEvent event) { long currentTime = System.currentTimeMillis(); long diffTime = currentTime - mLastUpdateTime; if (diffTime > UPDATE_INTERVAL) { if(mLastUpdateTime != 0) { float x = event.values[0]; float y = event.values[1]; float z = event.values[2]; float deltaX = x - mLastX; float deltaY = y - mLastY; float deltaZ = z - mLastZ; float delta = FloatMath.sqrt(deltaX * deltaX + deltaY * deltaY + deltaZ * deltaZ) / diffTime * 10000; if (delta > SHAKE_THRESHOLD) { // 当加速度的差值大于指定的阈值,认为这是一个摇晃 if (!shaken) { shaken = true; finish(); } if (listener != null) { listener.onShake(); } } mLastX = x; mLastY = y; mLastZ = z; } mLastUpdateTime = currentTime; } } public void onAccuracyChanged(Sensor sensor, int accuracy) { } public static interface OnShakeListener { public void onShake(); } }