studio español ejemplos actions android android-fragments broadcastreceiver

ejemplos - broadcastreceiver android studio español



Registro y anulación del registro de BroadcastReceiver en un fragmento (3)

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

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

y

getActivity().unregisterReceiver(batteryInfoReceiver);

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

2) ¿Es suficiente registrar el receptor en onResume?


Aquí hay un 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"/>

Diseño de Fragmento:

<?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>

dentro de la 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


Eche un vistazo al life-cycle de life-cycle de los 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 UI para su fragmento, debe devolver una Vista desde este método que es la raíz del diseño de su fragmento. Puede devolver nulo si el fragmento no proporciona una IU.

onResume (): el fragmento es visible en la actividad de ejecución

onPause (): generalmente es donde debe confirmar cualquier cambio que deba mantenerse más allá de la sesión de usuario actual (porque es posible que el usuario no regrese).

Conclusión:

Por lo tanto, es mejor registrar el receptor solo dentro de onResume() y anular el registro dentro de onPause() porque onCreateView() trata con la jerarquía de vistas. No tiene nada que ver con el receptor. Entonces no es dañino, pero seguramente es inútil.

¡¡Espero que sea util!!


Registro OnResume:

context.registerReceiver (receptor, IntentFilter (BroadCastAction.action_success))

onPause unRegister:

context.unregisterReceiver (mContactBroadCastReceiver);