Android BroadcastReceiver не запускается - PullRequest
0 голосов
/ 16 февраля 2019

Этот код хорошо работал на старых версиях Android.Когда я обновил его до последней версии Android Studio, он больше не работает.

Я пытаюсь отправить простую строку из одного из моих классов в основное действие.

Я объявляю получателя в моем манифесте....

<receiver android:name="com.domain.appname.MainActivity$MyReceiver">
<intent-filter>
<action android:name="MY_ACTION"/>
</intent-filter>
</receiver>

При попытке отправить трансляцию с помощью намерения.Это когда местоположение определяется как измененное

private class LocationListener implements android.location.LocationListener
{
    Location mLastLocation;

    public LocationListener(String provider)
    {
        mLastLocation = new Location(provider);
    }

    @Override
    public void onLocationChanged(Location location)
    {
        addStats("onLocationChanged - "+mLastLocation.getLatitude()+" "+mLastLocation.getLongitude()+" "+mLastLocation.getAccuracy()+" "+mLastLocation.getSpeed());
        mLastLocation.set(location);
        //send latitude, longitude and accuracy as broadcast to main activity
        Intent intent = new Intent();
        intent.setAction(MY_ACTION);
        intent.putExtra("DATAPASSED", mLastLocation.getLatitude()+" "+mLastLocation.getLongitude()+" "+mLastLocation.getAccuracy()+" "+mLastLocation.getSpeed());
        sendBroadcast(intent);
        addStats("after sendBroadcast");
    }

    @Override
    public void onProviderDisabled(String provider){}

    @Override
    public void onProviderEnabled(String provider){}

    @Override
    public void onStatusChanged(String provider, int status, Bundle extras){}
}

Строки addStats там только для отладки, и все они запускаются.то есть, я вижу статистику по обнаружению новых long / lat и получаю сообщение «after sendBroadcast», поэтому похоже, что этот код отправляет (или пытается отправить) широковещательную рассылку.

Сейчас в моей основной деятельностиЯ получаю это как приемник ...

//receives the broadcasts from the MyLocationService service
public static class MyReceiver extends BroadcastReceiver{
    @Override
    public void onReceive(Context arg0, Intent arg1) {
        addStats("inside onReceive");
        String datapassed = arg1.getStringExtra("DATAPASSED");
    }
}

Это никогда не срабатывает.Я никогда не вижу сообщение "inside onReceive".

Есть идеи, что мне не хватает?Я прошел через много стековых потоков и результатов Google, и, кажется, выше, что мне нужно, чтобы это работало.Как я уже говорил, раньше он работал нормально (возможно, версия 26 Android), но я пытаюсь запустить это приложение на более новых версиях ОС.

1 Ответ

0 голосов
/ 16 февраля 2019

Вам, вероятно, нужно использовать явное намерение.См. https://stackoverflow.com/a/49197540/383676.

Однако, если вы вещаете в том же приложении, лучше использовать: https://developer.android.com/reference/android/support/v4/content/LocalBroadcastManager#sendBroadcast(android.content.Intent)

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