一、微信小程序或app如何检测摇一摇事件
首先我们来实现小程序或app如何实现摇一摇的检测,首先看微信小程序,微信小程序有个api重力感应接口,我们只要监听一下数据就可以检测用户是否摇一摇,代码如下:
Page({
  isShow: false,
  onShow: function () {
    var that = this;
    this.isShow = true;
    wx.onAccelerometerChange(function (e) {
      if(!that.isShow){
        return
      }
      console.log(e.x)
      console.log(e.y)
      console.log(e.z)
      if (e.x > 1 && e.y > 1) {
        wx.showToast({
          title: '摇一摇成功',
          icon: 'success',
          duration: 2000
        })
      }
    })
  },
  onHide: function(){
    this.isShow = false;
  }
})好了,那么andriod和ios如何实现呢先看ios如何实现摇一摇检测,     新建一个CWindow类继承UIWindow,重写-(void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event方法。
        .h文件代码:
#import <UIKit/UIKit.h>.m文件代码:
@interface CWindow : UIWindow
@end
//好了,那么Android如何实现摇一摇检测呢,首先在Manifest添加一个permission。
// CWindow.m
// Contact
//
#import "CWindow.h"
#import "CConstants.h"
@implementation CWindow
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
// Initialization code
}
return self;
}
//检测摇动
-(void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event
{
if(event.type == UIEventSubtypeMotionShake)
{
CCLog(@"Motion shake.");
[[NSNotificationCenter defaultCenter] postNotificationName:APP_SHAKE_NOTIFICATION object:nil];
}
}
/*
// Only override drawRect: if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
- (void)drawRect:(CGRect)rect
{
// Drawing code
}
*/
@end
<uses-permission android:name="android.permission.VIBRATE"/>然后检测 SensorEvent的值变化,代码如下:
package com.example.a;二、面对面摇一摇如何检测
import android.app.Activity;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.os.Vibrator;
import android.view.Menu;
import android.widget.Toast;
public class MainActivity extends Activity {
private SensorManager smg;
private Vibrator vbt;
private static final int SENSOR_SHAKE=10;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
smg=(SensorManager)this.getSystemService(SENSOR_SERVICE);
vbt=(Vibrator)this.getSystemService(VIBRATOR_SERVICE);
}
@Override
public void onResume(){
super.onResume();
if(smg!=null){
smg.registerListener(sensorEventListener, smg.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),smg.SENSOR_DELAY_NORMAL);
}
}
@Override
public void onPause(){
super.onPause();
if(smg!=null){
smg.unregisterListener(sensorEventListener);
}
}
private SensorEventListener sensorEventListener =new SensorEventListener(){
public void onSensorChanged(SensorEvent event){
float[] values =event.values;
float x = values[0];
float y = values[1];
float z = values[2];
System.out.println("x:"+x+" y:"+y+" z:"+z);
int medumValue =15;
if(Math.abs(x)>medumValue||Math.abs(y)>medumValue||Math.abs(z)>medumValue){
vbt.vibrate(200);
Message msg=new Message();
msg.what=SENSOR_SHAKE;
}
}
public void onAccuracyChanged(Sensor sensor,int assuray){
}
};
Handler handler=new Handler(){
public void handleMessage(Message msg){
super.handleMessage(msg);
switch (msg.what){
case SENSOR_SHAKE:
Toast.makeText(getApplicationContext(), "你摇手机了", 2000).show();
}
}
};
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
面对面摇一摇我们可以通过gps定位或者公网内容ip地址来进行匹配,比如检测两个用户是否开了gps,在摇的那几秒钟时间内,gps数据是否相近,如果没开gps那就判断网络,获取两台手机的外网及内网ip,通过匹配来判断。
网友回复
- threejs如何做个三维搭积木的游戏?
- three如何实现标记多个起始路过地点位置后选择旅行工具(飞机汽车高铁等),最后三维模拟行驶动画导出mp4?
- ai实时驱动的3d数字人可视频聊天的开源技术有吗
- swoole+phpfpm如何实现不同域名指向不同目录的多租户模式?
- 如何用go替换nginx实现请求phpfpm解析运行php脚本?
- 有没有浏览器离线运行进行各种文档、图片、视频格式转换的开源工具?
- 如何使用go语言搭建一个web防火墙?
- linux如何检测特定网络协议比如http协议中报文是否包含特点关键词并阻止返回给客户?
- 如果在nginx外过滤包含某些关键词的网页并阻止打开?
- 程序员怎么做副业赚钱?



 
				 
			 
			 
				 
			