2017-03-19 14 views
-1

モバイルアプリケーションで、ユーザーが携帯電話のスピードの速さと方向を検出する機能を作りたいと考えています。私はこれが角速度だと信じていますが、私が間違っていれば私を修正してください。リアクションネイティブのモバイルアプリケーションで角速度を検出する

私は、Expo開発ツールとExpo加速度計APIの助けを借りて反応ネイティブ(作成 - 反応 - ネイティブアプリ)を使用してこのアイデアを試しています。 https://docs.expo.io/versions/v15.0.0/sdk/accelerometer.html

私の質問はおそらくもっと基本的です。 電話が回転しているスピードと、どちらの方向を確実に検出できますか?そして、私が書いたコードソリューションは、さまざまなモバイルデバイス間で一貫した値を提供するか、激しく変化しますか?

次に、それがもっともらしい偉業であれば、どうすればそのような値を決定できますか?ミリ秒からミリ秒までの値を比較しますか?その場合、どの値ですか?

私の頭の中でこれを手伝ってくれてありがとう。

答えて

0

私は、正しい用語が何であるかまだまだわかりませんが、私はジャイロスコープAPIを使用し、 'Z値'を監視することで、私が探している価値を達成することができました。ここに私の実例があります。 (expoで実行する必要があります)

import React from 'react'; 
import Expo, { 
    Gyroscope, 
} from 'expo'; 

import { Text, TouchableOpacity, View } from 'react-native'; 

export default class Test extends React.Component { 
    constructor(props) { 
    super(props); 
    this.state = { 
     gyroscopeData: { 
     x: 0, 
     y: 0, 
     z: 0 
     }, 
    } 
    } 
    componentDidMount() { 
    this._toggle(); 
    } 

    componentWillUnmount() { 
    this._unsubscribe(); 
    } 

    _toggle =() => { 
    if (this._subscription) { 
     this._unsubscribe(); 
    } else { 
     this._subscribe(); 
    } 
    } 
    _slow =() => { 
    Gyroscope.setUpdateInterval(1000); 
    } 

    _fast =() => { 
    Gyroscope.setUpdateInterval(16); 
    } 
    _subscribe =() => { 
    this._subscription = Gyroscope.addListener((result) => { 
     this.setState({gyroscopeData: result}); 
    }); 
    } 

    _unsubscribe =() => { 
    this._subscription && this._subscription.remove(); 
    this._subscription = null; 
    } 
    render() { 
    let { x, y, z } = this.state.gyroscopeData; 
    return (
     <View> 
     {/*<Text> x: {round(x)}</Text>*/} 
     {/*<Text> y: {round(y)}</Text>*/} 
     <Text> z: {z}</Text> 

     <View> 
      <TouchableOpacity onPress={this._toggle}> 
      <Text>Toggle</Text> 
      </TouchableOpacity> 
      <TouchableOpacity onPress={this._slow}> 
      <Text>Slow</Text> 
      </TouchableOpacity> 
      <TouchableOpacity onPress={this._fast}> 
      <Text>Fast</Text> 
      </TouchableOpacity> 
     </View> 
     </View> 
    ); 
    } 
} 
function round(n) { 
    if (!n) { 
    return 0; 
    } 

    return Math.floor(n * 100)/100; 
} 
関連する問題