Cómo registrarReceiver en Fragmento

Mostrar dispositivos Bluetooth en un ListView . Lo probé en una Activity antes y funcionó, pero ahora tengo que incluir este ListView en un Fragment

Está claro que una o dos cosas no pertenecen aquí, como el registerReceiver , unregisterReceiver y 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(); } } 

Las líneas que comienzan con registerReceiver , unegisterReceiver y if(resultCode==RESULT_CANCELED){ me están dando problemas.

Como un hecho adicional, he tratado de cambiarlo a una actividad en lugar de un fragmento, pero mi clase principal tiene un error con eso porque estoy trabajando con Fragmentos.

Todos estos métodos y variables pertenecen a la clase Activity . Así que considere llamarlos con el contexto de la Actividad de Fragmento de los padres.

Puede llamar a los métodos necesarios como:

  getActivity().registerReceiver(receiver, filter); 

y

  getActivity().unregisterReceiver(receiver); 

if(resultCode==RESULT_CANCELED){

Puede ser reemplazado por

  `if(resultCode == Activity.RESULT_CANCELED){` 

Espero que esto solucione su problema.

Los métodos registerReceiver() y unregisterReceiver() son métodos de la clase Context . En este caso, usted necesita su Activity (que es un Context ).

Los fragmentos proporcionan un acceso fácil a su actividad que contiene a través del método getActivity() .

RESULT_CANCELED es simplemente una variable estática en la clase Activity , por lo que puede acceder a ella en cualquier lugar a través de Activity.RESULT_CANCELED .

Dado que la actividad se recrea en los cambios de configuración mientras que el fragmento resiste, significa que el contexto de la actividad podría desaparecer lo que conduce a la pérdida de receptores en la recreación de la actividad. Por lo tanto, sugiero que registre receptores de difusión en su fragmento con contexto de nivel de aplicación. A continuación, puede registrar y anular el registro de sus receptores en onResume() y onPause() del fragmento, respectivamente. De esta manera sus receptores están vinculados al ciclo de vida de los fragmentos y no a la actividad.

  • Cómo cambiar el estilo ProgressBar en ListFragment en la biblioteca de compatibilidad?
  • ¿Cómo enviar datos de una actividad a su fragmento padre?
  • SavedInstanceState al restaurar el fragmento de la pila trasera
  • Android - Obtención de contexto de un fragmento en un buscapersonas
  • Android: clics retardados en ListView
  • ¿Por qué se arroja NPE al finalizar Actividad?
  • Fragmento de actualización de ViewPager
  • Comunicación entre fragmentos / cuadros de diálogo en android
  • FragmentMap + ActionBar Tab
  • Fragmentos de Android en la API inferior
  • PreferenceFragment se muestra de forma transparente
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.