send intent from service to activity

匿名 (未验证) 提交于 2019-12-03 02:22:01

问题:

I'm trying to return the result from an IntentSerivce to the mainactivity using an intent, but I can't get it to work. The IntentService receives the intent from the activity without a problem, does it's thing and gets a JSONstring. Now the only problem left is to send this String back to the activity.

Here is the method in the 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; 

And here is the 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); } 

Obviously the startActivity isn't working, but what else is there to use? (I would rather not use a broadcast receiver). Regards Peter L.

Update

this it how the MainActivity looks 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");         }     } }; 

This code is the onCreate:

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

This is the method:

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

The last trace in logcat is the System.out.println("action: "+RTRetur.getAction()");

-action:       student.kau.RECEIVE_JSON 

回答1:

For this, you can use a BroadcastReceiver in your Activity.

Here is a great example I use to communicate continuously between Service Activity using BroadcastReceivers.

Here is another great example of communication between Service Activity. It uses Messenger and IncomingHandler.

BroadcastReceiver

I will make a quick example for your case.

This is your BroadcastReceiver for your Activity. It is going to receive your String:

//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; 

In your onCreate() of the activity

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

In your onDestroy() of the activity, make sure you unregister the broadcastReceiver.

bManager.unregisterReceiver(bReceiver); 

And finally, in your Service onStart(), do this:

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

and your Activity will receive the intent with that json in it as an extra



易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!