Android - jak wyświetlić okno dialogowe na natywnym ekranie?

Zastanawiałem się, czy ktoś może powiedzieć, jak wyskakiwać ekran okna dialogowego nad natywnym ekranem Androida?

Obecnie mam aplikację, która pułapki połączenia wychodzącego i zatrzymuje go, a następnie chcę, aby pop up okno dialogowe, które przejmie od ekranu Dialer i ostrzegać użytkownika, że tam próba połączenia została zablokowana i pozwolić im mieć kilka nowych opcji z okna dialogowego.

Wiem, że niektórzy ludzie powiedzą, że powinienem używać powiadomień, ale jestem tego świadomy i jego nie tak, jak powinno działać, muszę mieć możliwość wyświetlenia okna dialogowego, gdy połączenie zostanie uwięzione.

To jest mój kod do tej pory

  AlertDialog LDialog = new AlertDialog.Builder(context)
     .setTitle("Call Blocked")
     .setMessage("Call Blocked, reroute call?")
     .setPositiveButton("ok", null).create();
      LDialog.show();

Zakładam, że muszę w jakiś sposób uzyskać kontekst ekranu wybierania?

Czy ktoś może zaoferować jakąś pomoc i pomoc lub linki do tutoriali?

Z góry dzięki

Author: Donal Rafferty, 2010-01-27

2 answers

Do mojej aplikacji użyłem aktywności z tematem Dialog. Możesz zadeklarować motyw w pliku manifestu:

<activity android:name="PopupActivity"
  android:launchMode="singleInstance" android:excludeFromRecents="true"
  android:taskAffinity="" android:theme="@android:style/Theme.Dialog" />
  • użyj launcheMode="singleInstance" i taskAffinity="", Jeśli wyskakujące okienko jest odłączone od głównej aplikacji. W przeciwnym razie użytkownik może kliknąć przycisk Wstecz i powrócić do poprzedniej aktywności aplikacji.
  • excludeFromRecents="true" Aby uniknąć pojawiania się wyskakującego okienka w ostatnich zadaniach (długie naciśnięcie home)
  • theme="@android:style/Theme.Dialog" aby ustawić motyw okna dialogowego.
 58
Author: tbruyelle,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-01-27 13:52:50

Jak uzyskać odpowiednik launchMode = singleTask w kodzie

Nie widziałem jasnego wyjaśnienia, jak ustawić te flagi programowo, więc dołączę moje wyniki tutaj. tldr: musisz ustawić FLAG_ACTIVITY_NEW_TASK i FLAG_ACTIVITY_MULTIPLE_TASK.

Jeśli uruchomisz to bezpośrednio z aplikacji, okno dialogowe pojawi się na górze ostatniej aktywności aplikacji. Ale jeśli używasz transmisji PendingIntent przez AlarmManager do uruchomienia "okna dialogowego", masz czas, aby przełącz się na inną aplikację, aby zobaczyć, że Twoje "okno dialogowe" pojawi się nad inną aplikacją, jeśli styl jest odpowiednio ustawiony, aby pokazać, co jest za nią.

Oczywiście należy odpowiadać za to, kiedy właściwe jest wyświetlanie okna dialogowego na innych aplikacjach.

public class MyReceiver extends BroadcastReceiver {
  @Override
  public void onReceive(Context context, Intent intent) {

// you have to set these flags here where you receive the broadcast
// NOT in the code where you created your pendingIntent
    Intent scheduledIntent = new Intent(context, AlertAlarmActivity.class);
    scheduledIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    scheduledIntent.addFlags(Intent.FLAG_ACTIVITY_MULTIPLE_TASK);
    context.startActivity(scheduledIntent);
 4
Author: user1445967,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-07-19 19:02:42