Android 安卓-用震动启动应用程序

Android 安卓-用震动启动应用程序,android,android-sensors,shake,sensormanager,Android,Android Sensors,Shake,Sensormanager,我是android开发领域的新手。我正在开发一个应用程序,我需要通过摇晃设备来启动它。我怎样才能完成这件事?我读了很多文章,并尝试了几个代码。但他们中没有一个人成功了。请提供特定文件的完整代码(从上到下)。这样我就能够准确地理解我需要在代码中修改的地方。谢谢大家! 试试这个,首先创建您的服务 public class ShakeService extends Service implements SensorEventListener { private SensorManager senso

我是android开发领域的新手。我正在开发一个应用程序,我需要通过摇晃设备来启动它。我怎样才能完成这件事?我读了很多文章,并尝试了几个代码。但他们中没有一个人成功了。请提供特定文件的完整代码(从上到下)。这样我就能够准确地理解我需要在代码中修改的地方。谢谢大家!

试试这个,首先创建您的服务

public class ShakeService extends Service implements SensorEventListener {

private SensorManager sensorMgr;
private Sensor acc;
private long lastUpdate = -1;
private float x, y, z;
private float last_x, last_y, last_z;
private static final int SHAKE_THRESHOLD = 1100;



@Override
public void onCreate() {


    Toast.makeText(this,
            "Service Started", Toast.LENGTH_SHORT).show();
    sensorMgr = (SensorManager) getSystemService(SENSOR_SERVICE);
    acc=sensorMgr.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);

    boolean accelSupported=  sensorMgr.registerListener((SensorEventListener) this, acc, SensorManager.SENSOR_DELAY_GAME);
    long curTime11 = System.currentTimeMillis();

    if (!accelSupported) {
        // on accelerometer on this device
        sensorMgr.unregisterListener((SensorEventListener) this,acc);
    }

    super.onCreate();
}


protected void onPause() {
    if (sensorMgr != null) {
        sensorMgr.unregisterListener((SensorEventListener) this,acc);
        sensorMgr = null;
    }
    return;
}


@Override
public int onStartCommand(Intent intent, int flags, int startId) {


    return super.onStartCommand(intent, flags, startId);
}

@Override
public void onDestroy() {

    if (sensorMgr != null) {
        sensorMgr.unregisterListener((SensorEventListener) this,acc);
        sensorMgr = null;
    }
    stopSelf();
    super.onDestroy();
}

@Nullable
@Override
public IBinder onBind(Intent intent) {
    return null;
}

@Override
public void onSensorChanged(SensorEvent sensorEvent) {

    if (sensorEvent.sensor.getType() == Sensor.TYPE_ACCELEROMETER) {
        long curTime = System.currentTimeMillis();
        // only allow one update every 100ms.
        if ((curTime - lastUpdate) > 100) {
            long diffTime = (curTime - lastUpdate);
            lastUpdate = curTime;

            x = sensorEvent.values[SensorManager.DATA_X];
            y = sensorEvent.values[SensorManager.DATA_Y];
            z = sensorEvent.values[SensorManager.DATA_Z];

            float speed = Math.abs(x+y+z - last_x - last_y - last_z) / diffTime * 10000;

            if (speed > SHAKE_THRESHOLD) {
                Log.d("sensor", "shake detected w/ speed: " + speed);
                Toast.makeText(this, "shake detected w/ speed: " + speed, Toast.LENGTH_SHORT).show();

                      Intent myIntent= new Intent(this, MyActivity.class);
                      myIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    /                 startActivity(myIntent);
                ////Here start your activity and your application will be started
            }
            last_x = x;
            last_y = y;
            last_z = z;
        }

    }

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

 }

}
并确保在清单中声明您的服务

<service
        android:name=".ShakeService"
        android:enabled="true"
        android:exported="true"></service>

你做了什么?在这里发布一些代码如果我这么做了,我会实现一个服务,它一直在设备上工作,由BOOT_COMPLETE启动,在服务中我会听加速度计数据,确定震动。然后,当确定“我读了很多线程并尝试了几个代码,但没有一个有效”时,就开始活动——然后提供一个演示,准确地说明您尝试了什么,并准确地解释什么不起作用。“请提供特定文件(或多个文件)的完整代码(从上到下)”--堆栈溢出不是这样工作的。如果你想为自己编写自定义代码,请雇人。@commonware很抱歉,你完全误解了我的意思。正如我之前所说,我是Android开发领域的新手。有时,人们会用不同的短语给出答案。例如,如果你看一下下面的第一个答案,它会说“现在使用onSensorChanged获取读数”。我的知识还不足以理解我需要把这个东西放在代码的什么地方。我应该把它放在MainActivity还是ShakeService中?如果它是主要活动,那么它到底在哪里?在OnCreate()方法内部还是之后?我一点也不懂。我仍然“我的知识还不足以理解我到底需要把这个东西放在我的代码中的什么地方”——这很好。然而,处理这一问题的正确方法是,如果你不完全理解某个问题的答案被发布,请发表评论,要求澄清。
ShakeActivity Extendes Service
看起来很奇怪,但总体来说,答案很好,尽管我对activity有代码,对于问题,刚将其更改为服务,以便可以忽略名称:)立即编辑,ShakeServiceyou将其放置在服务中的onStartCommand()方法之外class@AbdulKawee因为我是一个新手,你能告诉我我需要把这个“onSensorChanged”方法放在哪里吗?。在什么档案里?在什么字里行间?
startService(new Intent(MainActivity.this,ShakeService.class));