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

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

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

 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 ссылка

Ответ 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", чтобы получить эффект диалога, когда он на самом деле является активным.