Androidでのシェイクの実現

揺れと言えば、WeChatの揺れ機能を思い浮かべるかもしれません。その後、多くのアプリもShakeの関連機能に従いました。ここでは、シェイクでそれを行う方法を紹介します。

ステップ1:SensorManagerオブジェクトを宣言する

ステップ2:ActivityのonResumeメソッドを書き直し、このメソッドにセンサー監視イベントを登録し、監視するセンサーのタイプを指定します。

ステップ3:ActivityのonPauseメソッドを書き直し、このメソッドでセンサーイベントをログアウトします

手順4:SensorEventListenerを継承し、onSensorChangedメソッドとonAccuracyChangedメソッドを実装する必要があるセンサーイベントリスナーを作成します。その中で、前者の方法はセンシング情報が変化したときにトリガーされ、ビジネスロジックはここで処理されます。後者の方法は経度が変化したときにトリガーされ、通常は処理する必要はありません。

コード例

権限を追加する

<uses-permission android:name="android.permission.VIBRATE"/>

MainActivity.java

public class MainActivity extends BaseActivity implements SensorEventListener {

    private TextView tv_sensor;
    private SensorManager mSensorMgr;//声明一个传感管理器对象
    private Vibrator mVibrator;//声明一个震动器对象

    @Override
    protected MvcBaseModel getModelImp() {
        return null;
    }

    @Override
    protected int getContentLayoutId() {
        return R.layout.activity_main;
    }

    @Override
    protected void initWidget() {
        tv_sensor = findViewById(R.id.tv_sensor);
        //从系统服务中获取传感管理器对象
        mSensorMgr = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
        //从系统服务中获取振动器对象
        mVibrator = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
    }

    @Override
    protected void onPause() {
        super.onPause();
        mSensorMgr.unregisterListener(this);
    }

    @Override
    protected void onResume() {
        super.onResume();
        mSensorMgr.registerListener(this
                ,mSensorMgr.getDefaultSensor(Sensor.TYPE_ACCELEROMETER)
                ,SensorManager.SENSOR_DELAY_NORMAL);
    }

    @Override
    public void onSensorChanged(SensorEvent event) {
        if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER){//加速度变更事件
            //value[0]:X轴,value[1]:Y轴,values[2]:Z轴
            float[] values = event.values;
            if ((Math.abs(values[0])>15) || Math.abs(values[1])>15 || Math.abs(values[2])>15){
                tv_sensor.setText("恭喜您摇一摇了"+System.currentTimeMillis());
                //系统检测摇一摇事件后,震动手机提示用户
                mVibrator.vibrate(500);
            }
        }
    }

    //当传感器精度改变时回调该方法,一般无需处理
    @Override
    public void onAccuracyChanged(Sensor sensor, int accuracy) {

    }
}

実際の使用では、システムを振った後、システムに複数のコールバックの問題があることがわかりました。ここでロックして、応答後に応答しなくなります。3秒後に応答を続けます。これにより、関連する操作を1回だけ実行するという目的を達成できます。

おすすめ

転載: blog.csdn.net/weixin_38322371/article/details/115319320