Intereting Posts
Анимация группы детей в группе просмотра Нарисуйте плавно масштабированные растровые изображения на холсте Как восстановить ранее отображаемый фрагмент? Разработка в облаке, но приложение Debug Android на локальном устройстве через USB через удаленный рабочий стол Потоковое видео с видео Андроид носить встроенный приложение минимальной версии Undefined не является объектом (оценка «_reactNative.PropTypes.string») Ошибка Как лучше всего оптимизировать Picasso в GridView? Android Lollipop с пользовательским логотипом Material theme не действует, как DrawerToggle PhoneGap / JQuery Mobile – нарушение стиля страницы, когда клавиатура видна Отображение DatePicker с полем года или без него @SuppressWarnings vs @SuppressLint Внедрение admob для различных видов деятельности Векторная графика в списке слоев на более старых версиях Android MainActivity просочилась в ServiceConnection android.speech.SpeechRecognizer$Connection@414ee400, которая была первоначально связана здесь

Как я могу отправить данные результатов из широковещательного приемника на активность

У меня есть Activity, который вызывает широковещательный приемник. Широковещательный приемник ждет и слушает GPS. Когда слушатель получит новую точку, я хочу отправить этот новый пункт в Activity. Как я могу отправить данные из широковещательного приемника на активность?

Мне нужен слушатель в моей активности, ожидающий ответа от Broadcast Receiver. Как я могу это сделать?

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

    Вы абстрактно приемник:

    public abstract class SmsReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { //Add you receiver logic here ... ... onNewPosition(); } protected abstract void onNewPosition(); } 

    В вашей деятельности:

     public class MyActivity extends Activity { private smsReceiver smsReceiver; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.map_one_position); smsReceiver = new smsReceiver() { // this code is call asyncrously from the receiver @Override protected void onNewPosition() { //Add your activty logic here } }; IntentFilter intentFilter = new IntentFilter("android.provider.Telephony.SMS_RECEIVED"); intentFilter.setPriority(999); this.registerReceiver(smsReceiver, intentFilter); } @Override protected void onPause() { super.onPause(); this.unregisterReceiver(this.smsReceiver); } } 

    Надеюсь, это поможет вам …

    У вас есть несколько способов, которыми вы можете это сделать, и несколько соображений.

    1. Вы можете опросить, то есть проверять каждый раз снова, используя либо Обработчик, либо Таймер, чтобы узнать, прибыла ли информация.

    2. Вы можете зарегистрировать приемник вещания как внутренний класс своей деятельности, а затем вы можете вызывать методы в своей активности.

    3. Вы можете передать трансляцию Intent в свой класс с информацией, но если ваша деятельность не находится на переднем плане, вы можете принести ее туда, и это не на 100%, что вы хотите …

    Что касается некоторых соображений, BroadCastReciver в основном используется в качестве слушателя, а не внутренний так называемый внутренний класс, это лучшая практика, на мой взгляд, для использования с Акциями, для Служб, которые вы можете использовать в качестве отдельного класса и зарегистрировать в Manifest.xml. Теперь вы должны помнить, что при трансляции трансляции ваша активность может быть неактивной из-за изменения ориентации или события, которое приостанавливает ваше приложение, чтобы вы могли пропустить это событие. Я не слушаю системные события, но мои собственные события, поэтому я использую липкую трансляцию, чтобы предотвратить эту проблему.

    Я определил слушателя для своего получателя и использовал его в действии, и теперь он работает отлично. Возможно ли возникнуть какая-либо проблема позже?

     public interface OnNewLocationListener { public abstract void onNewLocationReceived(Location location); 

    }

    В моем классе приемника, который называется ReceiverPositioningAlarm:

     // listener ---------------------------------------------------- static ArrayList<OnNewLocationListener> arrOnNewLocationListener = new ArrayList<OnNewLocationListener>(); // Allows the user to set an Listener and react to the event public static void setOnNewLocationListener( OnNewLocationListener listener) { arrOnNewLocationListener.add(listener); } public static void clearOnNewLocationListener( OnNewLocationListener listener) { arrOnNewLocationListener.remove(listener); } // This function is called after the new point received private static void OnNewLocationReceived(Location location) { // Check if the Listener was set, otherwise we'll get an Exception when // we try to call it if (arrOnNewLocationListener != null) { // Only trigger the event, when we have any listener for (int i = arrOnNewLocationListener.size() - 1; i >= 0; i--) { arrOnNewLocationListener.get(i).onNewLocationReceived( location); } } } 

    И в одном из методов моей деятельности:

     OnNewLocationListener onNewLocationListener = new OnNewLocationListener() { @Override public void onNewLocationReceived(Location location) { // do something // then stop listening ReceiverPositioningAlarm.clearOnNewLocationListener(this); } }; // start listening for new location ReceiverPositioningAlarm.setOnNewLocationListener( onNewLocationListener); 

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