Android: несколько пользовательских трансляций не работают - PullRequest
0 голосов
/ 13 июня 2019

Извините, если у меня здесь длинные проблемы, но это заняло три дня, и я не смог найти решение

В своем приложении я пытаюсь создать что-то вроде Whats Appили мессенджер с другим, что пользователь отправит свое текстовое сообщение в БД MySql на сервере, и моя команда обслуживания клиентов ответит на это сообщение

здесь у меня в двух ситуациях это иногда будет нужно

Первое: , когда приложение не имеет соединения или не может связаться с сервером, приложение будет проверять соединение и пытаться отправлять сообщение каждую 1 минуту.

Второе: когда пользователь успешно отправит сообщение, приложение будет проверять, получен ли ответ в БД или нет, каждые 3 минуты.

, потому что я очень плохо знаком с android и потому что я не могу использовать firebase, потому чтовысокие сборы, если у моего приложения будет много пользователей!Я думаю об использовании сервиса для запуска Alarm с broadcastreceiver для каждой ситуации.

Примечание: обе ситуации никогда не случаются вместе.Таким образом, службы или сигналы тревоги никогда не будут работать вместе.

Если у нас нет соединения, запустится первое, а когда оно закончится, работа закроется и начнется второе.и если у нас есть соединение, запустится только вторая служба.

И я буду контролировать ее с помощью записей sharedPreferences с операторами if в действии вроде: Если значение sharedPreferences имеет значение, запустите службу, еслидругое значение остановите его

проблема здесь ... первая служба и ее аварийный сигнал и приемник успешно работают в указанное время мне нужно

но втораянет Служба только запустится, но аварийный сигнал и приемник не запустятся

Я не знаю, где неправильно я делаю

это код манифеста:

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

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

        //This is my FIRST alarm (I changed the names to explain the example)
        <receiver
        android:name=".FIRSTalarm"
        android:process=":remote"/>

        <receiver
        android:name=".SECONDalarm"
        android:process=":remote"/>

        //This receiver to check if the phone reboot and the app need to start service again.
        <receiver android:name=".AlarmAutoStart">
        <intent-filter>
            <action android:name="android.intent.action.BOOT_COMPLETED" />
        </intent-filter>
    </receiver>

Это первый сервисный код:

public class FIRSTservice extends Service {

FIRSTalarm FIRSTalarm = new FIRSTalarm();
    public void onCreate ()
    {
        super.onCreate();
    }

    @Override
    public int onStartCommand (Intent intent,int flags, int startId)        {
        FIRSTalarm.setAlarm(this);
        return START_STICKY;
    ...

Первый код ошибки:

public class FIRSTalarm extends BroadcastReceiver {
    @Override
    public void onReceive(final Context context, Intent intent)
    {
        PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
        PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK,"MyAPP:mytag");

        wl.acquire();

        // My Check Connection code here


        wl.release();
    }

    public void setAlarm(Context context)
    {
        AlarmManager am =(AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
        Intent i = new Intent(context, FIRSTalarm.class);
        PendingIntent pi = PendingIntent.getBroadcast(context, 0, i, 0);
        am.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), 60000, pi); // Millisec * Second * Minute
    }

    public void cancelAlarm(Context context)
    {
        Intent intent = new Intent(context, FIRSTalarm.class);
        PendingIntent sender = PendingIntent.getBroadcast(context, 0, intent, 0);
        AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
        alarmManager.cancel(sender);
    }
}

Это второй сервисный код:

public class SECONDservice extends Service {T

SECONDalarm SECONDalarm = new SECONDalarm();
    public void onCreate ()
    {
        super.onCreate();
    }

    @Override
    public int onStartCommand (Intent intent,int flags, int startId)        {
        SECONDalarm.setAlarm(this);
        return START_STICKY;
    ...

Все вышеперечисленное работает успешно и в указанное время

Проблема в этом Тревоге (не работает)

Второй код тревоги

public class SECONDalarm extends BroadcastReceiver {
@Override
public void onReceive(final Context context, Intent intent) {
    PowerManager pm2 = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
    PowerManager.WakeLock wl2 = pm2.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK,"MyAPP:mytag2");

    wl2.acquire();

    // My code.
    Toast.makeText(context, "Second Alarm start?!!", Toast.LENGTH_LONG).show(); // For example


    wl2.release();
}

public void setAlarm(Context context)
{
    AlarmManager am2 =( AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
    Intent i2 = new Intent(context, SECONDalarm.class);
    PendingIntent pi2 = PendingIntent.getBroadcast(context, 1, i2, 0);
    am2.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), 180000, pi2);
}

public void cancelAlarm(Context context)
{
    Intent intent3 = new Intent(context, SECONDalarm.class);
    PendingIntent sender3 = PendingIntent.getBroadcast(context, 1, intent3, 0);
    AlarmManager alarmManager3 = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
    alarmManager3.cancel(sender3);
}
}

Заранее спасибо

1 Ответ

0 голосов
/ 13 июня 2019

вы можете использовать workmanager .U можете использовать PeriodicTimeWorkRequest в диспетчере работ, чтобы выполнять работу, проделанную с большим трудом. Workmanager выполнит все действия в широковещательном приемнике и т. Д. Не нужно поддерживать это. См .: Работа менеджера в Android

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...