在Android中从一个活动启动广播接收器

18

我想从一个活动中启动广播接收器。我有一个扩展广播接收器的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调用Broadcast Receiver?能否有人告诉我我错在哪里?谢谢!

如果我理解正确,您只是想分离BroadcastReciever... - Its not blank
4个回答

33

使用以下方法发送自定义广播:

定义一个操作名称:

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

从你的Activity发送广播:

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

更多有关自定义广播的信息,请参见使用接收器进行自定义意图和广播


非常感谢您的回复!我尝试了一下,但是我的接收器没有接收到任何消息...相反,在Logcat中我得到了这个消息:检测到没有GPU仿真的模拟器。我尝试启用模拟器的GPU仿真,但是它说快照和GPU因素不能同时为真。我取消了快照因素。但是仍然没有收到消息... - Leela
我忘了提到我的发送者和接收者来自两个不同的应用程序。 - Leela

2

0

0

为此,您需要为接收器广播一个意图,请参见下面的代码:

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

您可以设置Intent的操作和其他属性,并使用应用程序上下文进行广播,无论您在此处设置的Intent操作是什么,都必须在AndroidManifest.xml中使用接收器标记进行定义。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接