Intereting Posts
Нет Интернета на эмуляторе Android – почему и как исправить? Можете ли вы использовать один и тот же OnClickListener для разных кнопок? OpenID для приложений для Android, для которых требуется SignIn Выполнение задач сборки android в пользовательских задачах Класс кинжала не может быть связан с ключом Возможно ли построить DialogPreference из DialogFragment? Android: обновление в пользовательском интерфейсе очень быстро Макет экрана перемещается вверх, когда отображается клавиатура EditText растет с вводом текста Должно ли приложение проверять, имеет ли устройство функцию вызова при использовании намерений ACTION_DIAL? Как получить информацию об использовании аккумулятора Android по заявке Как получить имя пользователя Twitter с помощью Twitter 4j Как узнать, когда действие завершается макетом? Как отслеживать трафик / URL-адрес HTTP (S) в Android? Как создавать вкладки в приложении Android и динамически добавлять вкладки (в зависимости от соответствия пользователей)

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

У меня есть 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); 

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