我正在制作一个应用程序,当我摇动设备时,一个活动会在前台启动。我使用了服务和 BroadcastReciever。我不知道我做错了什么
这是我实现传感器事件的服务类。
`
public class ShakeService extends Service implements SensorEventListener {
private SensorManager sensorManager;
private Sensor accelerometer;
private float acceleration;
private float accelerationCurrent;
private float accelerationLast;
@Override
public void onCreate() {
super.onCreate();
sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
accelerometer = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
acceleration = 10f;
accelerationCurrent = SensorManager.GRAVITY_EARTH;
accelerationLast = SensorManager.GRAVITY_EARTH;
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
sensorManager.registerListener(this, accelerometer, SensorManager.SENSOR_DELAY_NORMAL);
return START_STICKY;
}
@Override
public void onSensorChanged(SensorEvent event) {
float x = event.values[0];
float y = event.values[1];
float z = event.values[2];
accelerationLast = accelerationCurrent;
accelerationCurrent = (float) Math.sqrt((double) (x * x + y * y + z * z));
float delta = accelerationCurrent - accelerationLast;
acceleration = acceleration * 0.9f + delta;
if (acceleration > 15) { // You can adjust the shake threshold as per your requirement
Intent intent = new Intent(this, getCor_sendSms.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
}
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
// Not used in this example
}
@Override
public void onDestroy() {
super.onDestroy();
sensorManager.unregisterListener(this);
}
@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}
}
`
ShakeReceiver.java
这是我的 BroadcastReciever 类
\`
public class ShakeReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals("ACTION_SHAKE")) {
Intent activityIntent = new Intent(context, getCor_sendSms.class);
activityIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(activityIntent);
}
}
}
\`
`
<activity android:name=".getCor_sendSms" />
<service android:name=".ShakeService" />
<receiver android:name=".ShakeReceiver"
android:exported="true">
<intent-filter>
<action android:name="com.example.shake" />
</intent-filter>
</receiver>`
get_cor_send_sms.java 这是我想在摇动设备时启动的活动 `
Intent intent = new Intent(this, ShakeService.class);
startService(intent);`