Я использую службу переднего плана в своем приложении для обнаружения встряхивания и запуска приложения из любого места в MainActivity. После выполнения некоторого кода теперь я застрял с проблемой. Я надеюсь, что кто-нибудь найдет решение или подскажет, как это сделать. Да, я запускал приложение, после того, как каждый раз, когда я встряхиваю телефон, запускаю сервис, приложение закрывается автоматически. Мой сервисный код приведен ниже
public class ExampleService extends Service {
private SensorManager sensorManager;
private float acelVal;
private float acelLast;
private float shake;
public ExampleService() {
}
@Override
public void onCreate() {
super.onCreate();
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Intent notificationIntent=new Intent(this,MainActivity.class);
PendingIntent pendingIntent=PendingIntent.getActivity(this,0,notificationIntent,0);
Notification notification=new NotificationCompat.Builder(this,CHANNEL_ID)
.setContentTitle("Example service")
.setContentText("Example for shaking")
.setSmallIcon(R.drawable.ic_android)
.setContentIntent(pendingIntent)
.build();
sensorManager=(SensorManager)getSystemService(Context.SENSOR_SERVICE);
sensorManager.registerListener(sensorListener,sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),SensorManager.SENSOR_DELAY_NORMAL);
acelVal=SensorManager.GRAVITY_EARTH;
acelLast=SensorManager.GRAVITY_EARTH;
shake=0.00f;
startForeground(1,notification);
return START_NOT_STICKY;
}
public final SensorEventListener sensorListener= new SensorEventListener() {
@Override
public void onSensorChanged(SensorEvent sensorEvent) {
float x=sensorEvent.values[0];
float y=sensorEvent.values[1];
float z=sensorEvent.values[2];
acelLast=acelVal;
acelVal=(float)Math.sqrt((double)(x*x+y*y+z*z));
float delta=acelVal-acelLast;
shake=shake*0.9f+delta;
if(shake>12)
{
Intent intent= new Intent(ExampleService.this,MainActivity.class);
startActivity(intent);
}
}
@Override
public void onAccuracyChanged(Sensor sensor, int i) {
}
};
@Override
public void onDestroy() {
super.onDestroy();
}
@Override
public IBinder onBind(Intent intent) {
// TODO: Return the communication channel to the service.
throw new UnsupportedOperationException("Not yet implemented");
}
}
И код MainActivity:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Intent intent=new Intent(this,ExampleService.class);
startForegroundService(intent);
}
}
Я на правильном пути, чтобы достичь этого? Если нет, подскажите, как это решить