как использовать приемник вещания Android - PullRequest
0 голосов
/ 08 февраля 2012

Ниже приведен пример службы, активности и широковещательного приемника Активность - это настройка, которая вносит изменения в сервис. Приемник вещания прослушивает изменения в настройках и обновляет сервис. learner2learner

public class xService extends Service {

    @Override
    public void onCreate() {
        super.onCreate();
    }

    @Override
    public IBinder onBind(Intent intent) {
        return mBinder;
    }

    public static void setEnableNotification(int command) {
        Log.i("EnableNotification","Updated");
        if (command == 0)
            enableNotification = true;
        ...
    }
}

Приведенный ниже метод является частью действия, которое отправляет широковещательную рассылку:

@Override
protected void onCreate(Bundle savedInstanceState) {
    ....
    IntentFilter filter = new IntentFilter();
        filter.addAction(NotifyServiceReceiver.ACTION);       
    registerReceiver(receiver,filter);
}   
final String ACTION="broadcast_settings";
public void onClick(View view) {
    Intent intent = new Intent(ACTION);

    switch (view.getId()) {
    case R.id.switchNotification:
        if(switchNotification.isChecked()==true)
        {       
            intent.putExtra("EnableNotification", 0);
            Log.i("Security365","Notification is enabled.");
        }
        else if ....
        sendBroadcast(intent);
        break;
    }

Часть ниже - мой приемник:

public class xReceiver extends BroadcastReceiver {

    final String ACTION="broadcast_settings";

    @Override
    public void onReceive(Context context, Intent intent) {
        if(intent.getAction().equals(ACTION)){

            int enableNotification = intent.getIntExtra("EnableNotification", 0);

            if (enableNotification == 0)
                Serurity365Service.setEnableNotification(0);
        ...
        }
    }
}

MainFest

    <receiver android:name=".xReceiver" android:enabled="true"></receiver>

Ответы [ 2 ]

1 голос
/ 08 февраля 2012

Если я правильно понимаю ваш код, блок

 if(switchNotification.isChecked()==true)
    {       
        intent.putExtra("EnableNotification", 1);
        Log.i("Security365","Notification is enabled.");
    }

устанавливает EnableNotification на 1 в используемом намерении от sendBroadcast

В вашем приемнике вещания у вас есть

 int enableNotification = intent
            .getIntExtra("EnableNotification", 1);

    if (enableNotification == 0)
        Serurity365Service.setEnableNotification(0);

Таким образом, он говорит, что нужно извлечь дополнительные EnableNotification и, если значение отсутствует, вернуть значение по умолчанию 1, и тогда вы никогда не введете свой оператор if (enableNotification == 0).

Чтобы убедиться, что ваш широковещательный приемник работает правильно, добавьте оператор записи в начале своего приемника в методе onReceive.

EDIT

Также AndroidMANIFEST.xml имеет тег <manifest>, который объявляет package.

Например

<manifest package="com.hello.world" ...

Когда вы объявляете получателя в манифесте, ., как в .xReceiver, означает, что xReceiver.java должен находиться в пакете com.hello.world.

Если вы находитесь в другой упаковке, укажите полное имя или относительное для package, заявленное в <manifest

Подробнее здесь

0 голосов
/ 08 февраля 2012

вы отправляете трансляцию неправильно. Вы должны отправить его, как показано ниже:

    public void onClick(View view) {
        Intent intent = new Intent("your_action");

        switch (view.getId()) {
        case R.id.switchNotification:
            if(switchNotification.isChecked()==true)
            {       
                intent.putExtra("EnableNotification", 1);
                Log.i("Security365","Notification is enabled.");
            }
            else if ....
            sendBroadcast(intent);
            break;
        }
}

и получите его как:

 public class xReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {

     if(intent.getACtion().equals("your_action"){
        int enableNotification = intent
                .getIntExtra("EnableNotification", 1);

        if (enableNotification == 0)
            Serurity365Service.setEnableNotification(0);
        ...
   }
} 
}

обновить и Androidmanifest.xml:

<receiver android:name=".xReceiver" android:enabled="true">
 <intent-filter>
   <action android:name="your_action" />
 </intent-filter>
</receiver>
...