tutorial studio start sendbroadcast registerreceiver oreo example ejemplos android android-activity broadcastreceiver

studio - start broadcast receiver android



startActivity() de BroadcastReceiver (3)

De Docs :

No inicie actividades de receptores de difusión porque la experiencia del usuario es discordante; especialmente si hay más de un receptor. En cambio, considera mostrar una notificación.

Estoy intentando iniciar automáticamente mi aplicación de reloj nocturno en la carga utilizando el siguiente BroadcastReceiver implementado en el método onPause ():

BroadcastReceiver test = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { unregisterReceiver(this); Intent i = new Intent(context, NightClock.class); i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(i); } }; registerReceiver(test, new IntentFilter(Intent.ACTION_POWER_CONNECTED));

El método onReceive () se activa cuando el cable USB está enchufado, pero la actividad no se inicia. Sin embargo, el registro muestra esto:

I/ActivityManager( 79): Starting activity: Intent { flg=0x10000000 cmp=com.meins.nightclock/.NightClock }

¿Alguna idea de por qué el registro dice que la actividad se inició, pero no sucede nada?


Si su objetivo es que quiera que se inicie ACTION_POWER_CONNECTED cada vez que se ACTION_POWER_CONNECTED una transmisión ACTION_POWER_CONNECTED , su enfoque de usar un BroadcastReceiver está bien. Sin embargo, no lo registre de una actividad. Más bien, registrarlo en el manifiesto:

<receiver android:name=".OnPowerReceiver"> <intent-filter> <action android:name="android.intent.action.ACTION_POWER_CONNECTED" /> </intent-filter> </receiver>

Luego, tenga su BroadcastReceiver como una clase Java pública (aquí se llama OnPowerReceiver , aunque puede llamarlo como quiera) y startActivity() que llame a startActivity() .

Tenga en cuenta que los usuarios probablemente no quieran que haga esto. Hay muchos otros casos para conectar un teléfono a la alimentación además de iniciar un "reloj nocturno". Humildemente sugiero que simplemente permita que los usuarios comiencen su actividad a través de la pantalla de inicio.


Usted tiene contexto pasado como parámetro al método onRecieve (), así que solo use:

@Override public void onReceive(Context context, Intent intent) { //start activity Intent i = new Intent(); i.setClassName("com.test", "com.test.MainActivity"); i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(i); }

Funciona, por supuesto, debe cambiar el nombre de la clase de paquete y actividad al suyo.