无法解析抖动事件侦听器中的 getApplicationContext 和 startActivity 方法:Android Studio

Posted

技术标签:

【中文标题】无法解析抖动事件侦听器中的 getApplicationContext 和 startActivity 方法:Android Studio【英文标题】:Unable to resolve getApplicationContext and startActivity methods in shake event listener: Android Studio 【发布时间】:2014-07-09 17:22:32 【问题描述】:

我正在尝试实现一个抖动事件监听器,下面是我的代码。如果重要的话,它是 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);
        
    

【问题讨论】:

如果我知道它是什么以及如何做到这一点,我会这样做!我对此很陌生。 . 【参考方案1】:

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

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);
        
    

【讨论】:

你能指导我一些自定义构造函数的好例子吗? 那行得通。 .我必须在 Manifest 中提及 ShakeEventListener 吗?我该怎么做? 它不是一个服务、活动、接收者或提供者,所以它不必在清单中。 对,我很好奇是什么触发了听众。 .到目前为止,我的主要活动和引导接收器都没有说任何关于启动监听器的事情。

以上是关于无法解析抖动事件侦听器中的 getApplicationContext 和 startActivity 方法:Android Studio的主要内容,如果未能解决你的问题,请参考以下文章

react-datepicker“无法阻止被动事件侦听器调用中的默认值”

Spring事件监听机制源码解析

backref关系中的对称性与事件侦听器无法正常工作

源码解析Android中的事件处理

Visual Studio:无法解析事件/自定义事件工具提示

无法阻止被动事件监听器jQuery Mobile中的默认