Para mostrar un brindis cuando el usuario está en una de las actividades de la aplicación.
sólo necesitan una referencia de la actividad actual, y lo llaman con este código de ejemplo:
public void showToast(final String msg) {
final Activity a = currentActivity;
if (a != null) {
a.runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(a, msg, Toast.LENGTH_SHORT).show();
}
});
}
}
Hay una gran cantidad de opciones para conseguir la actividad actual, marque esta pregunta: ¿ How to get current foreground activity context in android?
pero yo uso este enfoque:
La aplicación debe tener:
private Activity currentActivity = null;
public Activity getCurrentActivity() {
return currentActivity;
}
public void setCurrentActivity(Activity mCurrentActivity) {
this.currentActivity = mCurrentActivity;
}
Cada actividad debe tener:
@Override
protected void onResume() {
super.onResume();
((MyApplication) getApplication()).setCurrentActivity(this);
}
@Override
protected void onPause() {
super.onPause();
((MyApplication) getApplication()).setCurrentActivity(null);
}
No hay razón no para crear un brindis de un servicio. De [la guía de desarrollo de notificaciones] (http://developer.android.com/guide/topics/ui/notifiers/toasts.html): > Si crea una notificación de brindis de un servicio, aparece al frente de la actividad actualmente en foco. –
Eso debe estar mal, porque no funciona cuando lo prueba con IntentService. La solución de @ rony funciona mejor. –