Не получавайте 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 Service, както следва:

 startActivity(intent);
 startService(serviceIntent);
person Maha Benabbou    schedule 24.08.2015
comment
Не съм сигурен, че това е причината, но разбрах, че съм стартирал услугата два пъти по погрешка. сега работи добре - person Gil; 24.08.2015
comment
Когато стартирате SinchService преди ListUsersActivity, намерението за излъчване се изпраща преди да бъде регистриран broadcastReceiver. Следователно намерението се премахва от Garbage Collector, след което BroadcastReceiver не получава нищо и spinner се зарежда за неопределено време. Както и да е, урокът беше актуализиран днес, защото много читатели се сблъскват с проблема със спинера! - 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