Java 当设备锁定在android中时,如何检测震动感

Java 当设备锁定在android中时,如何检测震动感,java,android,android-activity,Java,Android,Android Activity,我想制作一个震动设备的应用程序,它会检测到它。有一个shakedetecter filoe和服务文件,但它只能在应用程序打开时工作。你能帮我吗 public class Main extends AppCompatActivity { // The following are used for the shake detection private SensorManager mSensorManager; private Sensor mAccelerometer;

我想制作一个震动设备的应用程序,它会检测到它。有一个shakedetecter filoe和服务文件,但它只能在应用程序打开时工作。你能帮我吗

public class Main extends AppCompatActivity {

    // The following are used for the shake detection
    private SensorManager mSensorManager;
    private Sensor mAccelerometer;
    private ShakeDetector mShakeDetector;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.praclay);

        Intent intent = new Intent(Praclass.this, ShakeService.class);
        startService(intent);

        // ShakeDetector initialization
        mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
        mAccelerometer = mSensorManager
                .getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
        mShakeDetector = new ShakeDetector();
        mShakeDetector.setOnShakeListener(new ShakeDetector.OnShakeListener() {

            @Override
            public void onShake(int count) {
                Toast.makeText(getApplicationContext(), "shake",Toast.LENGTH_SHORT).show();
            }
        });
    }

正如您所提到的,当应用程序位于前台时,抖动检测就可以工作,而且您似乎知道,要在应用程序位于后台时运行进程或任务,您必须编写一个服务

当应用程序进入后台时,请确保您没有停止服务

一件非常重要的事情是,作为前台服务启动您的服务,通过


在设备锁定的情况下,这将是服务通信所必需的,因为最新设备的打盹模式。

这应该与本文中提到的问题相同。 或者你必须查看这篇文章,了解你的问题。 您的传感器可能也存在同样的问题。 您可以使用wakeLock,使设备屏幕不关闭,但它的电池放电过程

这里是制作前台服务的官方链接

在android中启动前台服务的完整教程

你能把你的shakeDetector类放在这里吗?是的,我把shakeDetector和shakeservice类放在这里,实际上我指的是这个。看看朱莉娅最后的评论。她找到了解决办法,但我不明白。可以查看她最后的评论并解释。她说她在服务类中注册了她的侦听器,该服务始终在后台运行,用于侦听设备的震动。你可以在服务中注册侦听器并侦听震动。我尝试了它,但没有正常工作。这意味着它仅在我第一次打开应用程序时才起作用比关机比锁定我的手机比摇晃我的手机它检测到震动事件,但花了一段时间后它不工作,检测不到震动事件。意思是说。您是否检查了第二次服务是否正在运行。?为什么服务没有运行?您是否将其设置为前台服务。。?