Pergunta

Eu desenvolvi um aplicativo que recebe uma transmissão e depois inicia um Activity, onde isso Activity Consultas a ContentProviderque retira informações do DNS em tempo real.

Eu gostaria de poder embaralhar isso para que, em vez 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(...);
}

vai:

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(...);
}

ou seja, se o query() não retorna dados que quero perder o lançamento doActivity, e permita que a mensagem de transmissão seja normal.

Se o query() Retorna dados, eu quero isso Cursor ser fornecido ao Activity, para que eu não precise ir e consultar os dados novamente.

Por sua vez, o Activity Tem sua própria interface do usuário à qual o usuário precisa responder.

Isso é possível?

Foi útil?

Solução

O que você quer é um pouco difícil e para mim, bastante ineficiente. Eu proponha que você use a primeira alternativa, mas quando você carrega o cursor na atividade, verifique se não há dados e sai da atividade.

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(...);
}

Isso terá exatamente o mesmo efeito, o cursor será carregado apenas uma vez e a atividade será exibida apenas se algo existir no cursor. A única sobrecarga extra é que a intenção é demitida, não importa o quê, mas isso não é exatamente tributário :)

Observe que também não haverá giro ou nada, o Android lida com o caso de chamada final em OnCreate () (acredito que o OnStart e o OnResume também), para que o usuário nunca saiba que isso aconteceu.

Outras dicas

Você precisará encontrar ou fazer um cursor serializável ou parcelável (e depois use o Intent.Setextra ()). Ou talvez seja possível ler todos os dados como um pacote e passar para a atividade?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top