Запустите Broadcast Receiver с активности в Android - PullRequest
16 голосов
/ 02 апреля 2012

Я хотел бы запустить приемник вещания из активности. У меня есть файл Second.java, который расширяет широковещательный приемник, и файл Main.java, из которого я должен инициировать широковещательный приемник. Я также попытался сделать все в Main.java следующим образом, но не знал, как определить в файле манифеста ...

Main.java:

public class Main extends Activity {
/** Called when the activity is first created. */
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
String rec_data = "Nothing Received";
private BroadcastReceiver myReceiver = new BroadcastReceiver() {

        public void onReceive(Context context, Intent intent) {
            // TODO Auto-generated method stub
            if( intent.getStringExtra("send_data")!=null)
                    rec_data = intent.getStringExtra("send_data");
            Log.d("Received Msg : ",rec_data);
        }
    }; 
    }
    protected void onResume() {
        IntentFilter intentFilter = new IntentFilter();
        //intentFilter.addDataType(String);
        registerReceiver(myReceiver, intentFilter);
        super.onResume();
    }

  @Override
protected void onPause() {
// TODO Auto-generated method stub
    super.onPause();
    this.unregisterReceiver(this.myReceiver);
}

}

Если я не могу сделать все в одном классе, как указано выше, как я могу вызвать Broadcast Receiver из Main.java? Может кто-нибудь, пожалуйста, дайте мне знать, где я делаю это неправильно? Спасибо!

Ответы [ 4 ]

29 голосов
/ 02 апреля 2012

используйте это, чтобы отправить пользовательскую трансляцию:

Определить имя действия:

public static final String BROADCAST = "PACKAGE_NAME.android.action.broadcast";

Получатель регистра AndroidManifest.xml:

<receiver android:name=".myReceiver" >  
    <intent-filter >  
        <action android:name="PACKAGE_NAME.android.action.broadcast"/>  
    </intent-filter>  
</receiver> 

Регистрация получателя:

IntentFilter intentFilter = new IntentFilter(BROADCAST);
registerReceiver( myReceiver , intentFilter);

отправить трансляцию из вашей активности:

Intent intent = new Intent(BROADCAST);  
        Bundle extras = new Bundle();  
        extras.putString("send_data", "test");  
        intent.putExtras(extras);  
        sendBroadcast(intent);

ВАШ BroadcastReceiver:

private BroadcastReceiver myReceiver = new BroadcastReceiver() {

        public void onReceive(Context context, Intent intent) {
            // TODO Auto-generated method stub
             Bundle extras = intent.getExtras();
           if (extras != null){  
           {
                    rec_data = extras.getString("send_data");
            Log.d("Received Msg : ",rec_data);
            }
        }
    };

для получения дополнительной информации о пользовательской трансляции см. Пользовательские настройки и трансляция с приемниками

2 голосов
/ 02 апреля 2012

ознакомьтесь с этим руководством, здесь вы получите всю справочную информацию о трансляции, в том числе о том, как запустить службу с активности или наоборот

http://www.vogella.de/articles/AndroidServices/article.html

0 голосов
/ 02 апреля 2012

Проверьте этот ответ:

https://stackoverflow.com/a/5473750/928361

Я думаю, что если вы ничего не указали в IntentFilter, вам нужно указать намерение класса получателя.

0 голосов
/ 02 апреля 2012

Для этого вам необходимо передать намерение для получателя, см. Код ниже: -

Intent intent=new Intent();
getApplicationContext().sendBroadcast(intent);

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

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