通过服务监听手机摇晃事件,启动支付宝
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(); } } }
相关文章推荐
- Android之获取手机上的图片和视频缩略图thumbnails
- android wifi 无线调试
- 5 个可以满足你的生产力、沟通和娱乐需求的开源手机应用
- 每日安全资讯:哪些属于App违法违规收集使用个人信息?
- 手机4大隐藏功能及使用必知常识第1/2页
- Android改变手机屏幕朝向的方法
- php实现用手机关闭计算机(电脑)的方法
- 基于JavaScript代码实现pc与手机之间的跳转
- js判断手机和pc端选择不同执行事件的方法
- JS判断客户端是手机还是PC的2个代码
- 手机屏幕尺寸测试――手机的实际显示页面的宽度
- android获取手机唯一标识的方法
- 让手机访问WAP网站服务器 IIS WAP服务器的MIME类型设置
- C#支付宝扫码支付代码完整版
- jQuery手机拨号界面特效代码分享
- jquery图片轮播插件仿支付宝2013版全屏图片幻灯片
- 基于OpenCart 开发支付宝,财付通,微信支付参数错误问题
- 手机短信轰炸(图)
- 手机怎么访问电脑服务器上的网页