Я пытаюсь запустить свое приложение из службы переднего плана, но это случается иногда, и я не знаю почему. Я создал службу, которая продолжает работать, когда мое приложение закрыто. Если действие завершает действие, оно больше не открывается из службы. вот эта служба:
public class MQTTService extends Service {
private PowerManager.WakeLock wakeLock;
public void MQTTService() {
clientPhone = new MqttAndroidClient(this, serverUri, clientId);
clientPhone.setCallback(new MqttCallback() {
public void connectComplete(boolean b, String s) {
}
@Override
public void connectionLost(Throwable throwable) {
}
@Override
public void messageArrived(String topic, MqttMessage mqttMessage) throws Exception {
Log.w("Mqtt", mqttMessage.toString());
Log.e("message ", String.valueOf(mqttMessage));
Toast.makeText(MQTTService.this, "Crash Occurred", Toast.LENGTH_SHORT).show();
Intent dialogIntent = new Intent(MQTTService.this, alert.class);
dialogIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(dialogIntent);
}
@Override
public void deliveryComplete(IMqttDeliveryToken iMqttDeliveryToken) {
}
});
}
@Override
public IBinder onBind(Intent intent) {
// TODO: Return the communication channel to the service.
throw new UnsupportedOperationException("Not yet implemented");
}
@Override
public void onCreate() {
super.onCreate();
final PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
wakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "carcrashdetection:PARTIAL_WAKE_LOCK_TAG");
createNotificationChannel(this);
Notification notification = new NotificationCompat.Builder(this, "NOTIFICATION_CHANNEL").setSmallIcon
(R.drawable.add_car).setContentTitle("Title")
.setContentText("Content").build();
startForeground(1001, notification);
registerReceiver();
new Thread(new Runnable() {
@Override
public void run() {
MQTTService.this.MQTTService();
}
}).start();
}
@Override
public void onDestroy() {
super.onDestroy();
if (wakeLock.isHeld()) {
wakeLock.release();
}
}
public void createNotificationChannel(MQTTService mqttService) {
// Create the NotificationChannel, but only on API 26+ because
// the NotificationChannel class is new and not in the support library
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
CharSequence name = "Channel name";
String description = "Description";
int importance = NotificationManager.IMPORTANCE_DEFAULT;
NotificationChannel channel = new NotificationChannel("NOTIFICATION_CHANNEL", name, importance);
channel.setDescription(description);
NotificationManager notificationManager = getApplicationContext().getSystemService(NotificationManager.class);
notificationManager.createNotificationChannel(channel);
}
}
}
Я вижу из журнала, что я все еще получаю сообщения (полученное сообщение - то, что запускает действие), но, кажется, не запускает действие каждый раз. вот действие, которое оно запускает.
И в основном задании, которое я нахожусь в процессе создания:
Intent i = new Intent(MainActivity.this, MQTTService.class);
ContextCompat.startForegroundService(MainActivity.this, i);
ActivityCompat.requestPermissions(MainActivity.this,new String[]{Manifest.permission.FOREGROUND_SERVICE},1);
Я уже некоторое время занимаюсь этим и, кажется, не могу понять, это из. Также основной деятельностью не является деятельность, которую я пытаюсь запустить. Моя цель - иметь возможность запускать действие всякий раз, когда сообщение отправляется в обязательном порядке. Мне лучше воспользоваться службой занятости?
Ps. Я избавился от большинства методов mqtt в сервисе, так как не думаю, что они необходимы для решения этой проблемы. дайте мне знать, если вы хотите, чтобы я добавил их.