/*
* 官网地站: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();
}
}