如何在Fragment中注册Receiver

时间:2015-09-03 14:57:56

标签: android android-fragments android-activity

我在//Get a list of all the names in the before array var beforeNames = arrayBefore.map(function(person) { return person.name }); //Filter the after array to only contain names not contained in the before array var uniqueObjects = arrayAfter.filter(function(person) { return beforeNames.indexOf(person.name) === -1; }); console.log(uniqueObjects); //[{"name":"Chris","height":"163","weight":"71"}] 中显示蓝牙设备。我之前在ListView尝试了它并且它有效,但现在我必须将此Activity包含在ListView

很明显,这里有一两件事不属于FragmentregisterReceiverunregisterReceiver

RESULT_CANCELED

protected void onResume() { registerReceiver(receiver, filter); filter = new IntentFilter(BluetoothAdapter.ACTION_DISCOVERY_STARTED); registerReceiver(receiver, filter); filter = new IntentFilter(BluetoothAdapter.ACTION_DISCOVERY_FINISHED); registerReceiver(receiver, filter); filter = new IntentFilter(BluetoothAdapter.ACTION_STATE_CHANGED); registerReceiver(receiver, filter); } @Override protected void onPause() { // TODO Auto-generated method stub super.onPause(); unregisterReceiver(receiver); } @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { // TODO Auto-generated method stub super.onActivityResult(requestCode, resultCode, data); if(resultCode == RESULT_CANCELED){ Toast.makeText(getActivity() , "El Bluetooth debe estar activado para continuar", Toast.LENGTH_SHORT).show(); getActivity().finish(); } } registerReceiverunegisterReceiver开头的行给了我一些问题。

作为一个附加的事实,我试图将其更改为Activity而不是Fragment,但是我的Main类因为我正在使用Fragments而出错。

4 个答案:

答案 0 :(得分:26)

所有这些方法和变量都属于Activity类。因此,请考虑使用父级Activity of Fragment的上下文来调用它们。

您可以将所需方法称为:

 getActivity().registerReceiver(receiver, filter);

 getActivity().unregisterReceiver(receiver);

if(resultCode==RESULT_CANCELED){

可以替换为

if(resultCode == Activity.RESULT_CANCELED){

希望这可以解决您的问题。

答案 1 :(得分:1)

关于广播信息,如果你这样注册,你就不会收到任何信息:

getActivity().registerReceiver(receiver, filter);

你应该写:

LocalBroadcastManager.getInstance(getActivity()).registerReceiver(receiver, filter);

例如,从服务(IntentService)发送意图的情况。

答案 2 :(得分:0)

registerReceiver()unregisterReceiver()方法是Context类的方法。在这种情况下,您需要ActivityContext)。

片段可以通过getActivity()方法轻松访问其包含的Activity。

RESULT_CANCELED只是Activity类的静态变量,因此您可以通过Activity.RESULT_CANCELED在任何地方访问它。

答案 3 :(得分:0)

如果在片段抵制时在配置更改中重新创建活动,则意味着活动上下文可能会消失,从而导致活动娱乐中的接收者丢失。因此,我建议在应用程序级上下文中注册片段中的广播接收器。然后,您可以分别在片段的onResume()onPause()中注册和取消注册您的接收器。这样,您的接收器就会绑定到片段生命周期而不是活动。