+
96
-

回答

一、微信小程序或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>

@interface CWindow : UIWindow

@end

.m文件代码:

//
// 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

好了,那么Android如何实现摇一摇检测呢,首先在Manifest添加一个permission。

<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,通过匹配来判断。

网友回复

我知道答案,我要回答