Aby wyświetlić toast, gdy użytkownik znajduje się w jednym z działań związanych z aplikacją.
Wystarczy odniesienie bieżącej działalności, i nazwać ten przykładowy kod:
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();
}
});
}
}
Istnieje wiele opcji, aby uzyskać bieżącej działalności, sprawdź to pytanie: How to get current foreground activity context in android?
ale używam tego podejścia:
aplikacja musi posiadać:
private Activity currentActivity = null;
public Activity getCurrentActivity() {
return currentActivity;
}
public void setCurrentActivity(Activity mCurrentActivity) {
this.currentActivity = mCurrentActivity;
}
Każde działanie musi posiadać:
@Override
protected void onResume() {
super.onResume();
((MyApplication) getApplication()).setCurrentActivity(this);
}
@Override
protected void onPause() {
super.onPause();
((MyApplication) getApplication()).setCurrentActivity(null);
}
Nie ma powodu, nie tworzyć Toastu z usługi. Z [podręcznika dev powiadomień] (http://developer.android.com/guide/topics/ui/notifiers/toasts.html): > Jeśli utworzysz powiadomienie o toastu z usługi, pojawi się on przed działaniem obecnie w centrum uwagi. –
To musi być złe, ponieważ nie działa, gdy testujesz go za pomocą IntentService. Rozwiązanie @ rony działa najlepiej. –