Android - 用摇晃启动应用程序
我是Android开发领域的新手。我正在开发一个应用程序,我需要通过摇动设备来启动。我怎样才能完成这件事?我阅读了很多主题并尝试了几个代码。但他们中没有人工作。请提供一些特定文件(或文件)的完整代码(从上到下)。这样我就能够明白我在代码中需要更改的位置。谢谢!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>
现在,作为
startService(new Intent(MainActivity.this,ShakeService.class));
'ShakeActivity extends Service'看起来很奇怪,但总的来说回答足够好 –
其实我的代码有活动,因为问题只是改了它的服务所以名字可以忽略:) –
现在编辑,ShakeService –
你有什么做了什么?在这里发布一些代码 –
如果我这样做了,我会实现一种服务,它始终在设备上工作,由BOOT_COMPLETE启动,并且在服务中,我会听加速计数据,确定* shake *。然后在确定 –
“我阅读了很多主题并尝试了几个代码,但其中没有一个能够工作” - 然后提供一个[mcve]来准确地展示您尝试的内容并准确解释哪些内容无效。 “请提供一些特殊文件(或文件)的完整代码(从上到下)” - 这不是Stack Overflow的工作方式。如果您想为您编写自定义代码,请雇用某人。 – CommonsWare