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

来源:互联网 发布:mysql mac dmg安装包 编辑:程序博客网 时间:2024/04/30 05:31
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();        }    }}
0 0