从android中的活动启动广播接收器



我想从一个活动启动一个广播接收器。我有一个扩展广播接收器的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);
}
}

如果我不能在一个类中完成上述所有操作,我如何从Main.java调用广播接收器?有人能告诉我哪里做错了吗?谢谢

使用此原因发送自定义广播:

定义动作名称:

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);

您的广播接收器:

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);
            }
        }
    };

有关自定义广播的更多信息,请参阅带有接收器的自定义意图和广播

在这里查看本教程,您将获得有关广播的所有帮助,包括如何从活动启动服务,反之亦然

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

对于必须为接收器广播意图的情况,请参阅下面的代码:-

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

您可以设置Intent的操作和其他属性,并可以使用Application上下文进行广播,无论您在这里设置了什么Intent操作,都必须在AndroidManifest.xml中使用receiver标记进行定义。

检查这个答案:

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

我认为,如果您在IntentFilter中没有指定任何内容,那么您需要告诉接收者类的意图。

最新更新