【问题标题】:Android receiving with broadcastreceiver within onClickListenerAndroid 在 onClickListener 中使用广播接收器接收
【发布时间】:2016-01-22 14:19:31
【问题描述】:

myButton 是一个按钮,当单击它时应该从后台 IntentService 接收广播。但从未收到广播。但是,如果我将 broadcastReceiver 移到 myButton.setOnClickListener 函数之外,我就会开始从我的后台服务接收广播。

有没有办法让broadcastReceiver 在setOnClickListener 函数中接收广播?

public class MainActivity extends Activity {

private BroadcastReceiver broadcastReceiver;

@Override
protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    myButton = (Button)findViewById(R.id.button1);
    myButton.setOnClickListener(new View.OnClickListener() {
        public void onClick(View view) {
            broadcastReceiver = new BroadcastReceiver() {

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

                    Toast.makeText(MainActivity.this, "BROADCAST RECEIVED", Toast.LENGTH_SHORT).show();
                    stopService(msgIntent);
                }
            };

        }
    });

  public void onResume()
  {
    super.onResume();

    IntentFilter filter = new IntentFilter(SimpleIntentService.ACTION_RESP);
    filter.addCategory(Intent.CATEGORY_DEFAULT);
    registerReceiver(broadcastReceiver,filter);


  }

  public void onPause()
  {
    unregisterReceiver(broadcastReceiver);
    super.onPause();
  }

}

我不得不从 onClick 方法中取出广播接收器。这有效并收到广播:

public class MainActivity extends Activity {

    private BroadcastReceiver broadcastReceiver;

@Override
protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    myButton = (Button)findViewById(R.id.button1);
    myButton.setOnClickListener(new View.OnClickListener() {
        public void onClick(View view) {
            //do extra stuff 
        }
    });
    broadcastReceiver = new BroadcastReceiver() {

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

                Toast.makeText(MainActivity.this, "BROADCAST RECEIVED", Toast.LENGTH_SHORT).show();
                stopService(msgIntent);
            }
        };
    }
}

【问题讨论】:

  • 你在哪里注册BroadcastReceiver
  • 您需要做的是点击按钮注册您的接收器。

标签: android broadcastreceiver android-broadcastreceiver


【解决方案1】:

你忘了registerReceiver吗?

您可能还需要在注册接收器时分配一个 IntentFilter。

以下是我项目中的一些示例代码:

private class LocationInfoReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        // do something
    }
}

locationInfoReceiver = new LocationInfoReceiver();
// the key you use setAction() method in your Intent Service
IntentFilter locationInfoReceiverFilter = new IntentFilter("your key");
locationInfoReceiverFilter.addCategory(Intent.CATEGORY_DEFAULT);
registerReceiver(locationInfoReceiver, locationInfoReceiverFilter);

【讨论】:

  • 我在 onResume() 函数中注册了接收者。还尝试在 onClick 功能之前注册它,但它不起作用。只有在 onClick 方法之外使用广播接收器才有效。我在 onResume 和 onPause 方法中进行了编辑。
  • 你从哪里开始你的服务?我在你的代码中看不到它。顺便说一句,根据this post,你在override方法“onPause”中放置super.onPause的顺序可能会导致一些问题,也许你可以将它向后移动再试一次。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多