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

  • ¿Cuál es la forma estándar de organizar el código de Android en el proyecto
  • El relleno no funciona en ImageButton
  • ¿Cómo hacer una pausa con DownloadManager?
  • ¿Cómo obtener una identificación de recurso con un nombre de recurso conocido?
  • ¿Cómo cambiar la Actividad dinámica?
  • Abrir una imagen mediante URI en el visor de imágenes de galería predeterminado de Android
  •  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?

  • OnCancelListener no se llama en DialogFragment
  • EditText duplicado en rotación
  • Android Fragmento Back Stack
  • Java.net.URLEncoder.encode codifica espacio como + pero necesito% 20
  • RecyclerView dentro de ScrollView no funciona
  • Cómo crear 9 patch en Photoshop? ¿Qué es la codificación 9.png?
  • 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.