Pregunta

He desarrollado una aplicación que recibe una transmisión y luego lanza un Activity, donde es Activity consultas un ContentProviderque extrae información del DNS en tiempo real.

Me gustaría poder mezclar esto para que en lugar de ir:

BroadcastReceiver.onReceive() {
  Intent intent = new Intent(...);
  intent.setData(...); // set a single String data
  context.startActivity(intent);
}

Activity.onCreate() {
  String value = intent.getData();  // get the String data
  Cursor = ContentProvider.query(search);
  ...
  setContentView(...);
}

va:

BroadcastReceiver.onReceive() {
  Cursor = ContentProvider.query(...);
  if (cursor != null) {
     Intent intent = new Intent(...);
     // how do I pass the cursor?
     getContext().startActivity(intent);
  }
}

Activity.onCreate() {
  // how do I retrieve the cursor?
  setContentView(...);
}

es decir.Si el query() no devuelve datos que quiero perder al iniciar elActivity, y permita que el mensaje de transmisión se transmita normalmente.

Si el query() devuelve datos, quiero eso Cursor que se suministrarán a el Activity, para no tener que volver a consultar los datos.

A su vez, el Activity tiene su propia interfaz de usuario a la que el usuario debe responder.

es posible?

¿Fue útil?

Solución

Lo que quieres es algo difícil y, para mí, bastante ineficiente. Le propondría que use la primera alternativa, pero cuando cargue el cursor en la actividad, verifique si no hay datos y luego salga de la actividad.

BroadcastReceiver.onReceive() {
  Intent intent = new Intent(...);
  intent.setData(...); // set a single String data
  context.startActivity(intent);
}

Activity.onCreate() {
  String value = intent.getData();  // get the String data
  Cursor = ContentProvider.query(search);

  if(cursor.isEmpty() ...){
    finish();
    return;
  }
  ...
  setContentView(...);
}

Esto tendrá exactamente el mismo efecto, el cursor solo se cargará una vez y la actividad solo se mostrará si algo existe en el cursor. La única sobrecarga adicional es que la intención se dispara sin importar qué, pero eso no es exactamente un impuesto :)

Tenga en cuenta que tampoco habrá ningún parpadeo ni nada, Android maneja el caso de finalizar la llamada en onCreate () (creo que también en onStart y onResume) para que el usuario nunca sepa que sucedió.

Otros consejos

Tendrá que buscar o hacer un cursor que sea serializable o parcelable (y luego usar intent.setExtra ()). ¿O tal vez es posible leer todos los datos como un paquete y pasarlos a la Actividad?

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