Не получать BroadcastReceiver, используя пример sinch

Я попытался использовать этот пример в своем приложении для обмена мгновенными сообщениями https://www.sinch.com/tutorials/android-messaging-tutorial-using-sinch-and-parse/ Я вызываю широковещательный приемник, чтобы прослушать трансляцию из моей службы, но это никогда не удается или терпит неудачу. Мой диалог прогресса продолжает вращаться вечно, и тосты не отображаются.

Мой сервис:

public class MessageService extends Service implements SinchClientListener {
...
private LocalBroadcastManager broadcaster;
private Intent broadcastIntent = new Intent("il.ac.app.my.Activity.ListUsersActivity");
...
@Override
public int onStartCommand(Intent intent, int flags, int startId) {

    APP_KEY = getResources().getString(R.string.sinch_key);
    APP_SECRET = getResources().getString(R.string.sinch_secret);
    ENVIRONMENT = getResources().getString(R.string.sinch_hostname);

    //get the current user id from Parse
    String currentUserId = ParseUser.getCurrentUser().getObjectId();
    if (currentUserId != null && !isSinchClientStarted()) {
        startSinchClient(currentUserId);
    }
    broadcaster = LocalBroadcastManager.getInstance(this);
    return super.onStartCommand(intent, flags, startId);
}
...
@Override
public void onClientStarted(SinchClient client) {
    broadcastIntent.putExtra("success", true);
    broadcaster.sendBroadcast(broadcastIntent);

    client.startListeningOnActiveConnection();
    messageClient = client.getMessageClient();
}

Моя деятельность:

private void showSpinner() {
    progressDialog = new ProgressDialog(this);
    progressDialog.setTitle("Loading");
    progressDialog.setMessage("Please wait...");
    progressDialog.show();

    //broadcast receiver to listen for the broadcast from MessageService
    receiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            Boolean success = intent.getBooleanExtra("success", false);
            progressDialog.dismiss();
            if (!success) {
                Toast.makeText(getApplicationContext(), "Messaging service failed to start", Toast.LENGTH_LONG).show();
            }
            else {
                Toast.makeText(getApplicationContext(), "Messaging service started", Toast.LENGTH_LONG).show();
            }
        }
    };

    LocalBroadcastManager.getInstance(this).registerReceiver(receiver, new IntentFilter("il.ac.app.my.Activity.ListUsersActivity"));
}

person Gil    schedule 23.08.2015    source источник
comment
Действие вашего намерения и ваш фильтр намерений различаются. Если вы поставите одно и то же для обоих, это может сработать.   -  person JohanShogun    schedule 23.08.2015
comment
Я не могу изменить IntentFilter, потому что registerReceiver ожидает IntentFilter.   -  person Gil    schedule 23.08.2015
comment
Действительно, когда я писал свой комментарий, у вас было другое действие в фильтре намерения, чем в намерении   -  person JohanShogun    schedule 24.08.2015


Ответы (2)


В LoginActivity попробуйте запустить ListUsersActivity перед службой Sinch следующим образом:

 startActivity(intent);
 startService(serviceIntent);
person Maha Benabbou    schedule 24.08.2015
comment
Я не уверен, что это было причиной, но я обнаружил, что дважды запускал службу по ошибке. теперь он работает нормально - person Gil; 24.08.2015
comment
При запуске SinchService до ListUsersActivity намерение широковещательной рассылки отправляется до регистрации широковещательного получателя. Следовательно, намерение удаляется сборщиком мусора, тогда BroadcastReceiver ничего не получает, и счетчик загружается бесконечно. Так или иначе, туториал был обновлен сегодня, потому что многие читатели сталкиваются с проблемой со спиннером! - person Maha Benabbou; 24.08.2015

Я попытался использовать этот пример в своем приложении для обмена мгновенными сообщениями https://www.sinch.com/tutorials/android-messaging-tutorial-using-sinch-and-parse/ Я вызываю широковещательный приемник, чтобы прослушать трансляцию из моей службы, но это никогда не удается или терпит неудачу. Мой диалог прогресса продолжает вращаться вечно, и тосты не отображаются.

Мой сервис:

public class MessageService extends Service implements SinchClientListener {
...
private LocalBroadcastManager broadcaster;
private Intent broadcastIntent = new Intent("il.ac.app.my.Activity.ListUsersActivity");
...
@Override
public int onStartCommand(Intent intent, int flags, int startId) {

    APP_KEY = getResources().getString(R.string.sinch_key);
    APP_SECRET = getResources().getString(R.string.sinch_secret);
    ENVIRONMENT = getResources().getString(R.string.sinch_hostname);

    //get the current user id from Parse
    String currentUserId = ParseUser.getCurrentUser().getObjectId();
    if (currentUserId != null && !isSinchClientStarted()) {
        startSinchClient(currentUserId);
    }
    broadcaster = LocalBroadcastManager.getInstance(this);
    return super.onStartCommand(intent, flags, startId);
}
...
@Override
public void onClientStarted(SinchClient client) {
    broadcastIntent.putExtra("success", true);
    broadcaster.sendBroadcast(broadcastIntent);

    client.startListeningOnActiveConnection();
    messageClient = client.getMessageClient();
}
person eee    schedule 22.03.2017