Прозрачная деятельность открывается по основной деятельности. Как открыть его не по основной деятельности?

Я создаю приложение, которое покажет уведомление и нажав на уведомление, я хочу открыть прозрачный диалог, например, операцию, которая будет иметь параметр, связанный с этим уведомлением.

Я определил прозрачную деятельность и зарегистрировал ее в уведомлении, как это.

Intent notificationIntent = new Intent(context, EasyToDoReminder.class); PendingIntent contentIntent = PendingIntent .getActivity(context, 0, notificationIntent, 0); 

Действие начинается, но за ним стоит основная деятельность. Как открыть операцию напоминания самостоятельно?

И я не пытаюсь показать диалог. Я хочу показать, что активность выглядит как диалог. Я уже использую тему, как вы упомянули. У меня также есть одна основная деятельность. Когда я пытаюсь запустить свой прозрачный диалог, например, активность, основное действие начинается, после чего начинается диалог, аналогичный действию.

Кто-нибудь может предложить сделать это в лучшем подходе?

Solutions Collecting From Web of "Прозрачная деятельность открывается по основной деятельности. Как открыть его не по основной деятельности?"

Хорошо, у меня тоже была эта проблема
Использовать другое действие LAUNCHER для второй активности

Манифест:

  <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 () , и если вы не просто используете свой контекст

Вы не можете запустить свой диалог, не запустив его. Я думаю, вам нужно сделать следующее:

  • Создайте новое действие, в котором вы измените свой стиль на стиль диалога:
    • android:theme="@android:style/Theme.Dialog"
  • В этом новом действии добавьте все, что вы хотите, когда пользователь нажмет на уведомление.
  • Свяжите свое уведомление с ним, как и вы.

Теперь, когда вы нажмете уведомление, откроется диалоговое окно.

Как сказал Booger, добавьте android:theme="@android:style/ThemeDialog" в <application ... </application> часть вашего манифеста, чтобы ваша основная активность просто отображалась как диалоговое окно без фона.

Вы также можете использовать диалоговое окно предупреждения с кнопками в нем, которые могли бы активировать нужные параметры, вместо того, чтобы иметь второе действие: ссылка AlertDialog

Вам нужно вызвать finish(); От вашей основной деятельности, чтобы она не появлялась за каждой другой деятельностью.

Лучшее объяснение здесь Неожиданное поведение при запуске действия в стиле диалога

Я решил свою проблему.

Сначала я добавил атрибут в файл макета для моего второго действия, как показано ниже.

 android:launchMode="singleTask" 

И, радуясь уведомлению, я устанавливаю следующий флаг для намерения.

 Intent notificationIntent = new Intent(context, EasyToDoReminder.class); notificationIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET ); 

Оно работает!!

Вот что сделал трюк для меня –

Для достижения результата сделайте следующее:

 public void onReceive(Context context, Intent intent) { ... resultIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); ... } 

Для активности, инкапсулирующей диалоговое предупреждение, сделайте это (в файле манифеста):

  <activity android:launchMode="singleInstance" </activity> 

Надеюсь это поможет…

Я не думаю, что вы сможете начать диалог, не начав сначала Activity (что я думаю, что вы пытаетесь сделать).

Вы можете настроить свой основной вид, чтобы он выглядел как диалог, но в остальном я думаю, что вы не можете запустить диалог, не имея контекста активности, чтобы связать его.

Возможно, я неправильно понимаю ваш вопрос.

Вы можете попробовать всплывающее окно, а затем раздуть макет внутри этого всплывающего окна. Или, используйте андроид: theme = "@ android: style / Theme.Dialog", чтобы получить эффект диалога, когда это фактически активность

Установите android:taskAffinity и android:launchMode="singleTask" в вашем файле манифеста для активности вашего диалога. Все кредиты на этот ответ .