【问题标题】:Start Broadcast Receiver from an activity in android从android中的活动启动广播接收器
【发布时间】:2012-04-02 08:01:11
【问题描述】:

我想从一个活动中启动一个广播接收器。我有一个 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 调用广播接收器?谁能让我知道我在哪里做错了?谢谢!

【问题讨论】:

  • 如果我理解正确你只需要 2 个单独的 BroadcastReciever...

标签: android broadcastreceiver


【解决方案1】:

使用这个为什么发送自定义广播:

定义一个动作名称:

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

有关自定义广播的更多信息,请参阅Custom Intents and Broadcasting with Receivers

【讨论】:

  • 非常感谢您的回复!我尝试这样做,但 myReceiver 没有收到任何消息...相反,我在 Logcat 中收到此消息:未检测到 GPU 仿真的仿真器。我试图启用模拟器的 GPU 模拟,但它说快照和 GPU 因素不能同时为真。我取消选中快照因素。但仍然没有收到消息...
  • 我忘了说我的发送者和接收者来自两个不同的应用程序
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

    为此,您必须为接收者广播一个意图,请参见下面的代码:-

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

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

    【讨论】:

      【解决方案4】:

      检查这个答案:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-23
        • 1970-01-01
        相关资源
        最近更新 更多