una studio segundo plano notificación mensajes mantener maneja app android service android-intent intentservice

android - studio - enviar intento de servicio a actividad



maneja mensajes de notificación en una app en segundo plano (1)

Estoy tratando de devolver el resultado de una IntentSerivce a la mainactivity con un intento, pero no puedo hacer que funcione. IntentService recibe la intención de la actividad sin ningún problema, lo hace y obtiene una JSONstring . Ahora el único problema que queda es enviar este String a la actividad.

Aquí está el método en la mainactivity:

public String RTConn(String query){ System.out.println("Querying Rotten Tomatoes."); Intent rtIntent = new Intent(MainActivity.this, RTConnection.class); rtIntent.putExtra("query", query); bindService(rtIntent, RTConnection, Context.BIND_AUTO_CREATE); startService(rtIntent); String json = getIntent().getStringExtra("json"); return json;

Y aquí está el IntentService:

public void onStart(Intent intent, int startId){ System.out.println("intent Received"); String jsonString = rottenTomatoesSearch(intent.getStringExtra("query")); Intent RTRetur = new Intent(RTConnection.this, MainActivity.class); RTRetur.putExtra("json", jsonString); startActivity(RTRetur); }

Obviamente, startActivity no funciona, pero ¿qué más hay para usar? (Preferiría no usar un receptor de transmisión). Saludos Peter L.

Actualizar

esto es como la actividad principal parece atm:

public static final String RECEIVE_JSON = "student.kau.RECEIVE_JSON"; private BroadcastReceiver RTReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { System.out.println("broadcast Received: "+intent.getAction()); if(intent.getAction().equals(RECEIVE_JSON)){ System.out.println("JSON Received."); String serviceJsonString = intent.getStringExtra("json"); } } };

Este código es el onCreate:

LocalBroadcastManager bManager = LocalBroadcastManager.getInstance(this); IntentFilter intentFilter = new IntentFilter(); intentFilter.addAction(RECEIVE_JSON); bManager.registerReceiver(RTReceiver, intentFilter);

Este es el método:

public void onStart(Intent intent, int startId){ System.out.println("intent Received"); String query = intent.getStringExtra("query"); String jsonString = rottenTomatoesSearch(query); System.out.println("Fetching done"); Intent RTRetur = new Intent(MainActivity.RECEIVE_JSON); System.out.println("action: "+RTRetur.getAction()); RTRetur.putExtra("json", jsonString); sendBroadcast(RTRetur); }

La última traza en logcat es System.out.println("action: "+RTRetur.getAction()");

-action: student.kau.RECEIVE_JSON


Para esto, puede usar un BroadcastReceiver en su Activity .

Este es un gran ejemplo que utilizo para comunicarme continuamente entre Service <> Activity usando BroadcastReceivers .

Aquí hay otro gran ejemplo de comunicación entre Service <> Activity. Utiliza Messenger y IncomingHandler .

Receptor de radiodifusión

Haré un rápido ejemplo para tu caso.

Este es su BroadcastReceiver para su actividad. Va a recibir su cadena:

//Your activity will respond to this action String public static final String RECEIVE_JSON = "com.your.package.RECEIVE_JSON"; private BroadcastReceiver bReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { if(intent.getAction().equals(RECEIVE_JSON)) { String serviceJsonString = intent.getStringExtra("json"); //Do something with the string } } }; LocalBroadcastManager bManager;

En su onCreate() de la actividad

bManager = LocalBroadcastManager.getInstance(this); IntentFilter intentFilter = new IntentFilter(); intentFilter.addAction(RECEIVE_JSON); bManager.registerReceiver(bReceiver, intentFilter);

En su onDestroy() de la actividad, asegúrese de anular el registro de broadcastReceiver.

bManager.unregisterReceiver(bReceiver);

Y finalmente, en su Service onStart() , haga esto:

System.out.println("intent Received"); String jsonString = rottenTomatoesSearch(intent.getStringExtra("query")); Intent RTReturn = new Intent(YourActivity.RECEIVE_JSON); RTReturn.putExtra("json", jsonString); LocalBroadcastManager.getInstance(this).sendBroadcast(RTReturn);

y su actividad recibirá la intención con ese JSON en ella como un extra