您的位置:首页 > 其它

通过服务监听手机摇晃事件,启动支付宝

2016-04-20 17:53 274 查看
import android.content.Context;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.os.Handler;
import android.util.Log;
import android.widget.Toast;

/**
*这是一个监听手机摇晃事件的监听器
*/

public class ShakeListener implements SensorEventListener{

public static final String TAG = "ShakeListener";

//摇晃需要持续1/10s
public static final int LASTTIME = 70;

//摇晃需要速度
public static final int SPEED = 4000;

private OnShakelistener listener = null;

private long lastTime;
private float lastX, lastY, lastZ;

private Context cxt;
private SensorManager manager = null;
private Sensor sensor = null;

public ShakeListener( Context cxt ) {
this.cxt = cxt;
}

@Override
public void onAccuracyChanged(Sensor arg0, int arg1) {
}
@Override
public void onSensorChanged(SensorEvent arg0) {
// TODO Auto-generated method stub
//      Log.e( TAG , "摇晃了" );
//      Toast.makeText( cxt , "摇晃了", Toast.LENGTH_SHORT).show();
long curTime = System.currentTimeMillis();
long time = curTime - lastTime;
if( time < LASTTIME ) return;
//时间已达到
lastTime = curTime;
float x = arg0.values[0],
y = arg0.values[1],
z = arg0.values[2];
float deltaX = x - lastX,
deltaY = y - lastY,
deltaZ = z - lastZ;
lastX = x;
lastY = y;
lastZ = z;
if( Math.sqrt( deltaX*deltaX + deltaY*deltaY + deltaZ * deltaZ )
/ time * 10000 < SPEED    ) return ;

if( listener != null ) listener.onShake();

stop();
new Handler().postDelayed( new Runnable() {
@Override
public void run() {
start();
}
} , 400 );

}

public void start(){
//先获取的传感器管理器,然后通过管理器获取重力传感器,管理器监听此传感器
manager = (SensorManager) cxt.getSystemService( Context.SENSOR_SERVICE );
if( manager != null ){
sensor = manager.getDefaultSensor( Sensor.TYPE_ACCELEROMETER );
}
if( sensor != null ){
manager.registerListener( this , sensor, SensorManager.SENSOR_DELAY_GAME );
}
}

public void stop(){
manager.unregisterListener( this );
}

public void setListener(OnShakelistener listener) {
this.listener = listener;
}

public interface OnShakelistener{
public void onShake();
}

}


import com.g.s.blacklist.service.ShakeListener.OnShakelistener;

import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.util.Log;
import android.widget.Toast;

/**
*选择服务理由是服务看不见界面,通过重载的onDestory达到服务不关闭,当返回桌面式仍然可以调到支付宝
*/
public class ShakeService extends Service implements OnShakelistener{

public static final String TAG = "shakeService";

private ShakeListener shake;

@Override
public IBinder onBind(Intent arg0) {
// TODO Auto-generated method stub
return null;
}

@Override
public void onCreate() {
shake = new ShakeListener( this );
shake.setListener( this );
shake.start();
super.onCreate();
}

@Override
public void onDestroy() {
// TODO Auto-generated method stub
startService( new Intent( this, ShakeService.class ) );
super.onDestroy();
}

@Override
public void onShake() {
Intent intent = getPackageManager().getLaunchIntentForPackage("com.eg.android.AlipayGphone");
if( intent != null ){
startActivity( intent );
}else{
Toast.makeText( this , "尚未安装支付宝!", Toast.LENGTH_SHORT ).show();
}
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  手机 支付宝