views:

107

answers:

2

Hi all, I'm starting learning android development, so my knowledge is really limited at the moment. I'm trying playing with broadcasts, but I'm stuck and I can't understand what I'm doing wrong. What I'm trying to do it's just show a simple Toast from the broadcast receiver.

The Intent is a custom intent defined in the manifest:

<receiver android:name=".receiver.SendReceiver" android:enabled="true">
     <intent-filter>
   <action android:name="com.android.terralink.sem.SOCCIA"></action>
     </intent-filter>
</receiver>

The receiver is defined like this:

public class SearchReceiver extends BroadcastReceiver {
    public void onReceive(Context context, Intent intent){
   Toast.makeText(context, "asasa", Toast.LENGTH_SHORT).show();
   }
}

In the first action called from the application I do this:

Intent i2 = new Intent(this, SearchReceiver.class);
i2.setAction(CUSTOM_INTENT);
sendBroadcast(i2);

I checked that the Toast code works in the Activity, but not in the broadcast. It is because the Toast can't be shown in the receiver context?

Also, another question more about android application structure. If from my Activty I allow the user to insert a string in a text box and submit (button bind), and I want the application do a search in the background and notify the user once the result is ready, is correct do the following? 1) Main Activity with search box 2) Start a Service that fetches the data, send a broadcast 3) The receiver notofy the user and open an Activity that shows the result

Does it make sense do something like that? Or the notification should be done by the service itself before finish its job?

Thanks

A: 

You cannot show a Toast in a broadcast receiver. Android will usually shut down your process once the onReceive() call has finished (for which it only allowed to take max. 10 seconds currently). Since a toast is shown asynchronously, I think its context is killed before it is even displayed.

As an alternative to Toast, you can take a look at the concept of RemoveViews for updating UI in another process from a receiver. Or, launch an activity that shows a toast and closes immediately.

For your question #2, I suggest that you keep the activity running after the search button is clicked and start an AsyncTask for the search, which updates the search results as they come in.

Thorstenvv
yes makes sense, what I supposed was happening, just wasn't 100% sure. thx a lot
CLod
A: 

Hi, I found out that the problem was in the manifest, when I registered the receiver. Actually it is possible to show a Toast in the receiver without any issue. Cheers

CLod