Я создаю приложение, которое покажет уведомление и нажав на уведомление, я хочу открыть прозрачный диалог, такой как операция, у которой будет опция, связанная с этим уведомлением.
Я определил прозрачную активность и зарегистрировал ее в уведомлении следующим образом.
Intent notificationIntent = new Intent(context, EasyToDoReminder.class);
PendingIntent contentIntent = PendingIntent
.getActivity(context, 0, notificationIntent, 0);
Действие начинается, но за ним заносится основное действие. Как открыть операцию напоминания самостоятельно?
И я не пытаюсь показать диалог. Я хочу показать, что действие похоже на диалог. Я уже использую тему, как вы упомянули. У меня также есть одна основная деятельность. Когда я пытаюсь запустить свой прозрачный диалог, например, активность, основное действие начинается, после чего начинается диалог, аналогичный активности.
Кто-нибудь может предложить сделать это в лучшем подходе?
Ответ 1
Я решил свою проблему.
Сначала я добавил атрибут в файл макета для моего второго действия, как показано ниже.
android:launchMode="singleTask"
и, освобождая от уведомления, я устанавливаю следующий флаг в намерение.
Intent notificationIntent = new Intent(context, EasyToDoReminder.class);
notificationIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET );
Это работает!!
Ответ 2
ok У меня тоже была эта проблема
использовать другую активность LAUNCHER для второй активности
manifest:
<activity android:name=".popup.PopUp"
android:label="~.Popup"
android:theme="@style/Theme.Transparent"
android:launchMode="singleInstance"
android:windowSoftInputMode="adjustResize">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
и в намерении:
Intent i = new Intent();
i.setClass(service.getBaseContext(), PopUp.class);
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK |
Intent.FLAG_ACTIVITY_SINGLE_TOP |
Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);
i.putExtra("id", id + "");
context.startActivity(i);
если вы вызываете из службы service.getBaseContext(), и если вы не просто используете контекст
Ответ 3
Вы не можете запустить свое диалоговое окно, не запустив его. Я думаю, вам нужно сделать следующее:
- Создайте новое действие, в котором вы измените свой стиль на стиль диалога:
-
android:theme="@android:style/Theme.Dialog"
- В этом новом действии добавьте все, что вы хотите, когда пользователь нажмет уведомление.
- Свяжите свое уведомление с ним, как и вы.
Теперь, когда вы нажимаете уведомление, появится диалоговое окно.
Ответ 4
Как сказал Booger, добавьте android:theme="@android:style/ThemeDialog"
в <application ... </application>
часть вашего манифеста, чтобы ваша основная активность просто отображалась как диалоговое окно без фона.
Вы также можете использовать диалоговое окно предупреждения с кнопками в нем, которые могли бы активировать нужные вам параметры, вместо того, чтобы иметь второе действие: AlertDialog ссылка
Ответ 5
Вам нужно вызвать finish();
из вашего основного действия, чтобы он не отображался за каждым другим действием.
Лучше объясняется здесь Неожиданное поведение при запуске действия в стиле диалога
Ответ 6
Вот что помогло -
Для достижения результата выполните следующее:
public void onReceive(Context context, Intent intent) {
...
resultIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
...
}
Для активности, инкапсулирующей диалоговое предупреждение, сделайте это (в файле манифеста):
<activity
android:launchMode="singleInstance"
</activity>
Надеюсь, что это поможет...
Ответ 7
Я не думаю, что вы сможете начать диалог, не начав сначала действие (что я думаю, что вы пытаетесь сделать).
Вы могли бы настроить свой основной вид, чтобы он выглядел как диалог, но в остальном я думаю, что вы не можете запустить диалог, не имея контекста активности, чтобы связать его.
Возможно, я неправильно понимаю ваш вопрос.
Ответ 8
Вы можете попробовать всплывающее окно, а затем раздуть свой макет внутри этого всплывающего окна.
Или, используйте android: theme = "@android: style/Theme.Dialog", чтобы получить эффект диалога, когда он на самом деле является активным.
Ответ 9
Установите android:taskAffinity
и android:launchMode="singleTask"
в вашем файле манифеста для активности вашего диалога. Все кредиты на этот ответ.