android - 无法解析摇动事件监听器中的 getApplicationContext 和 startActivity 方法 : Android Studio

标签 android accelerometer shake launching-application

我正在尝试实现摇动事件监听器,下面是我的代码。如果重要的话,它是 Android Studio 环境。它只是说无法解析方法 getApplicationContext 甚至 startActivity。谁能帮我找到我的错误?

package com.shaivaldesai.shake;

import android.app.Application;
import android.content.Context;
import android.content.Intent;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;

/**
 * Created by Shaival Desai on 7/3/14.
 */
public class ShakeEventListener implements SensorEventListener {


    @Override
    public void onAccuracyChanged(Sensor sensor, int i) {

    }

    // Low pass filter
    private float calcMaxAcceleration(SensorEvent sensorEvent) {

        final float alpha = 0.8f;

        float[] gravity = {-9.81f};

        gravity[0] = alpha * gravity[0] + (1 - alpha) * sensorEvent.values[0];
        gravity[1] = alpha * gravity[1] + (1 - alpha) * sensorEvent.values[1];
        gravity[2] = alpha * gravity[2] + (1 - alpha) * sensorEvent.values[2];

        float accX = sensorEvent.values[0] - gravity[0];
        float accY = sensorEvent.values[1] - gravity[1];
        float accZ = sensorEvent.values[2] - gravity[2];

        float max1 = Math.max(accX, accY);
        return Math.max(max1, accZ);
    }

    @Override
    public void onSensorChanged(SensorEvent sensorEvent) {
        //handleShake(sensorEvent);}
    float maxAcc = calcMaxAcceleration(sensorEvent);
       // void handleShake(sensorEvent){
        //float maxAcc = calcMaxAcceleration(sensorEvent);
        if(maxAcc>=15) {

        Intent intent = new Intent(getApplicationContext(),Main.class);
            intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            startActivity(intent);
        }
    }
}

最佳答案

SensorEventListener 中不存在这些方法。您必须从扩展 Activity 的类中复制它。您需要在 Context 对象上调用这些方法。您应该在采用 Context 对象的 ShakeEventListener 上定义自定义构造函数:

public class ShakeEventListener implements SensorEventListener {
    private Context mContext;

    public ShakeEventListener(Context context) {
        mContext = context;
    }

    /** omitting unchanged methods **/

    @Override
    public void onSensorChanged(SensorEvent sensorEvent) {
        //handleShake(sensorEvent);}
        float maxAcc = calcMaxAcceleration(sensorEvent);
        // void handleShake(sensorEvent){
        //float maxAcc = calcMaxAcceleration(sensorEvent);
        if(maxAcc>=15) {

            Intent intent = new Intent(mContext, Main.class);
            intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            mContext.startActivity(intent);
        }
    }
}

关于android - 无法解析摇动事件监听器中的 getApplicationContext 和 startActivity 方法 : Android Studio,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24660068/

相关文章:

android - 导入库仅用于调试

ios - 核心运动/加速度计 : Detecting when one edge of iPad lifts

ios - 在 iOS 的后台持续更新加速度计

jquery 摇动效果和 margin-auto

android - 当我的手机屏幕在 android 中关闭时无法检测到摇动事件

android - facebook sdk 的 Proguard 配置。剥离除分析之外的所有内容

android - ImageView 不能在 RelativeLayout 中居中

android - UIAutomator/Espresso 中的参数化

Android 加速度计和陀螺仪

ios - 用户界面测试 : Simulate a shake gesture with Swift