Почему этот Broadcast Receiver работает в Android? - PullRequest
0 голосов
/ 09 мая 2018

Я новичок в программировании на Android, и сейчас я сижу перед этой проблемой: я буду кодировать Broadcast Receiver, который срабатывает всякий раз, когда телефон заряжается или «разряжается». Итак, зарегистрировал получателя в Manifest.xml:

<receiver
   android:name=".Starter"
   android:enabled="true"
   android:exported="true">
   <intent-filter>
      <action android:name="android.intent.action.ACTION_POWER_CONNECTED" />
      <action android:name="android.intent.action.ACTION_POWER_DISCONNECTED" />
   </intent-filter>
</receiver>

В классе Broadcast Receiver я написал тост в метод onReceive (), который должен выполняться, когда приемник будет работать:

>     public class Starter extends BroadcastReceiver {
>     
>         @Override
>         public void onReceive(Context context, Intent intent) {
>             Toast.makeText(context,"blablabla",Toast.LENGTH_LONG).show();
>         }
>     }

Я так благодарен за каждую помощь, LG

1 Ответ

0 голосов
/ 09 мая 2018

При использовании BroadcastReceiver он должен быть зарегистрирован в классе, который будет прослушивать трансляции.

Это делается с помощью Context.registerReceiver() (https://developer.android.com/reference/android/content/Context#registerreceiver)

или

LocalBroadcastManager.getInstance(...).registerReceiver(...) (https://developer.android.com/reference/android/support/v4/content/LocalBroadcastManager).

  1. Создание IntentFilter с, которые будут прослушивать конкретную трансляцию.

  2. Зарегистрируйте свой приемник в onResume() в классе, который расширяет Activity или Fragment.

    class MainActivity extends Activity 
    {
        Starter myReceiver = new Starter(); // This is your class that extends BroadcastReceiver
    
        @Override
        public void onResume()
        {
            super.onResume();
    
            // Create IntentFilters that will listen for certain actions:
            IntentFilter intentFilterConnected = new IntentFilter(Intent.ACTION_POWER_CONNECTED);
            IntentFilter intentFilterDisconnected = new IntentFilter(Intent.ACTION_POWER_DISCONNECTED);
    
            // Then pass these intents to registerReceiver():
            registerReceiver(myReceiver, intentFilterConnected);
            registerReceiver(myReceiver, intentFilterDisconnected);
        }
    }
    

Теперь myReceiver onReceive() будет выполняться, когда MainActivity получает широковещательные сообщения, соответствующие IntentFilter s.

Примечание. Если класс, который создает экземпляр myReceiver, не расширяется Activity или Fragment, то вам нужно будет использовать LocalBroadcastManager.getInstance(...).registerReceiver(...).

...