Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


Registro y cancelación del registro de BroadcastReceiver en un fragmento

Mi aplicación tiene una barra de acción con 3 pestañas de fragmentos. En el segundo fragmento, registro y cancelo un BroadcastReceiver. onPause el registro del receptor en onPause y registrarlo en onCreateView y en onResume .

 getActivity().registerReceiver(this.batteryInfoReceiver, new IntentFilter(Intent.ACTION_BATTERY_CHANGED)); 

y

  • ¿Cómo difieren las operaciones popBackStack () y replace ()?
  • La configuración de Android cambia de forma aleatoria al valor predeterminado
  • ¿Qué pasará con SharedPreferences al actualizar una aplicación de Android?
  • ¿Cómo saber cuándo se ha matado mi aplicación?
  • La solicitud AJAX de Phonegap Android falla
  • Establecer un ancho máximo en un grupo de vistas
  •  getActivity().unregisterReceiver(batteryInfoReceiver); 

    1) ¿Está bien registrar el mismo receptor dos veces (en onCreateView y onResume)? (¿Es inofensivo?)

    2) ¿Basta con registrar el receptor en onResume?

  • Reutilización de objetos de vista de Android: impide que el tamaño antiguo se muestre cuando se vuelve a ver
  • Para mostrar una página html estática en android
  • ¿Apoya ADT Java 7 API
  • La UI de configuración de Libgdx da 2 errores inesperados en el nuevo proyecto GWT
  • Cambio de orientación de la pantalla de la tableta: no se ha encontrado ninguna vista para id para Fragment
  • OnCreate siendo llamado en la actividad A en la navegación ascendente
  • 2 Solutions collect form web for “Registro y cancelación del registro de BroadcastReceiver en un fragmento”

    Echa un vistazo al ciclo de vida de Fragments :

    OnCreateView (): El sistema llama a esto cuando es hora de que el fragmento dibuje su interfaz de usuario por primera vez. Para dibujar una interfaz de usuario para su fragmento, debe devolver una vista de este método que es la raíz del diseño del fragmento. Puede devolver null si el fragmento no proporciona una interfaz de usuario.

    OnResume (): El fragmento es visible en la actividad en ejecución

    OnPause (): Normalmente es donde se deben confirmar los cambios que deben persistir más allá de la sesión de usuario actual (porque el usuario puede no volver).

    Conclusión:

    Por lo tanto, es mejor registrar el receptor sólo dentro de onResume() y anular el registro dentro de onPause() porque onCreateView() ocupa de la jerarquía de vistas. No tiene nada que ver con el receptor. Así que no es perjudicial, pero seguramente es inútil.

    ¡¡Espero que sea util!!

    Aquí está el código que funciona para mí:

    Diseño interior:

     <Button android:id="@+id/button2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="sendInternalBroadcast" android:text="Broadcast"/> 

    Fragmento Diseño:

      <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" android:gravity="center"> <TextView android:layout_height="wrap_content" android:layout_width="wrap_content" android:text="Fragment One" android:id="@+id/fragmentoneTextView1"/> </LinearLayout> 

    Inside Actividad principal:

      public void sendInternalBroadcast(View view) { Intent intent = new Intent(); intent.setAction("com.codingbadly.stefanronnkvist.simplebroadcastreceiver.setup"); intent.putExtra("From", "sendInternalBroadcast"); sendBroadcast(intent); } 

    Fragmento:

     import android.app.*; import android.content.*; import android.os.*; import android.view.*; import android.widget.*; public class FragmentOne extends Fragment { View view; Context _context; PendingIntent pi; BroadcastReceiver br; AlarmManager am; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { view = inflater.inflate(R.layout.fragmentone, container, false); setup(); return view; } @Override public void onAttach(Context context) { super.onAttach(context); _context = context; } @Override public void onDestroyView() { super.onDestroyView(); _context.unregisterReceiver(br); } private void setup() { br = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent i) { TextView tv = (TextView)view.findViewById(R.id.fragmentoneTextView1); tv.setText("onReceive"); } }; _context.registerReceiver(br, new IntentFilter("com.codingbadly.stefanronnkvist.simplebroadcastreceiver.setup")); pi = PendingIntent.getBroadcast(_context, 0, new Intent("com.codingbadly.stefanronnkvist.simplebroadcastreceiver.setup"), 0); am = (AlarmManager)(_context.getSystemService(Context.ALARM_SERVICE)); } } 

    Buena Suerte .. Stefan Ronnkvist

    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.