如何在Fragment中注册Receiver

Pam*_*bos 10 android android-fragments android-activity

我在一个显示蓝牙设备ListView.我在尝试了Activity之前和它的工作,但现在我必须包括这ListViewFragment

很明显,这里有一两件不属于的东西,比如registerReceiver,unregisterReceiverRESULT_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();
        }
    }
Run Code Online (Sandbox Code Playgroud)

与启动线registerReceiver,unegisterReceiverif(resultCode==RESULT_CANCELED){在给我的问题.

作为一个附加的事实,我试图将它改为Activity而不是Fragment,但是我的Main类有一个错误,因为我正在使用Fragments.

ast*_*ter 30

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

您可以将所需方法称为:

 getActivity().registerReceiver(receiver, filter);
Run Code Online (Sandbox Code Playgroud)

 getActivity().unregisterReceiver(receiver);
Run Code Online (Sandbox Code Playgroud)

if(resultCode==RESULT_CANCELED){

可以替换为

if(resultCode == Activity.RESULT_CANCELED){

希望这能解决你的问题.

  • 太棒了:D非常感谢你! (2认同)