Pregunta

Estoy tratando de iniciarse automáticamente mi solicitud NightClock de carga utilizando la siguiente BroadcastReceiver implementado en el onPause () Método:

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, los programas de registro de esto:

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

Cualquier idea por qué el registro dice que se inicie la actividad, pero no pasa nada?

¿Fue útil?

Solución

Si su objetivo es que usted quiere NightClock que se inicia cada vez que se envía una emisión ACTION_POWER_CONNECTED, el enfoque de utilizar un BroadcastReceiver está muy bien. Sin embargo, no registrarlo 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>

A continuación, haga que su BroadcastReceiver como una clase Java pública (aquí llamado OnPowerReceiver, aunque se le puede llamar lo que quieras), y tienen que llamar startActivity().

Tenga en cuenta que los usuarios probablemente no quiero que hagas esto. Hay muchos otros casos para la conexión de un teléfono a la energía, además de iniciar un "reloj de la noche". Humildemente sugiero que simplemente deja que los usuarios comienzan su actividad a través de la pantalla de inicio.

Otros consejos

Tiene contexto pasado como parámetro al método onRecieve (), por lo que sólo tiene que utilizar:

 @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);
}

Se trabaja, por supuesto, usted tiene que cambiar el paquete y el nombre de la clase de actividad a su cuenta.

Docs :

  

No comience a las actividades de los receptores de radiodifusión debido a que la experiencia del usuario es discordante; especialmente si hay más de un receptor. En su lugar, considere la posibilidad de mostrar una notificación.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top