10

通知を表示するアプリケーションを構築しています。通知をクリックすると、その通知に関連するオプションを持つアクティビティのような透過的なダイアログを開きたいと思います。

透過的なアクティビティを定義し、このような通知に登録しました。

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

アクティビティは開始されますが、メインアクティビティはその背後に記載されています。リマインダーアクティビティを個別に開くにはどうすればよいですか?

そして、私はダイアログを表示しようとはしていません。ダイアログのようなアクティビティを表示したい。おっしゃるように、私はすでにテーマを使用しています。主な活動も1つあります。アクティビティのような透過的なダイアログを開始しようとすると、メインアクティビティが開始され、その上でアクティビティのようなダイアログが開始されます。

誰でもより良いアプローチでこれを行うことを提案できますか?

4

9 に答える 9

3

わかりました、私もこの問題を抱えてい
ました2番目のアクティビティに別の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()を使用し、コンテキストを使用するだけではない場合

于 2014-07-08T07:04:19.667 に答える
2

これが私のためにトリックをしたものです-

結果の目的のためにこれを行います:

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

ダイアログアラートをカプセル化するアクティビティの場合、これを(マニフェストファイルで)実行します。

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

お役に立てれば...

于 2013-08-24T17:07:40.367 に答える
1

鼻くそが言ったように、マニフェストの一部に追加android:theme="@android:style/ThemeDialog"<application ... </application>て、メインアクティビティを背景なしでダイアログボックスとして表示するようにします。

2番目のアクティビティを実行する代わりに、必要なオプションをアクティブ化できるボタンを含むアラートダイアログを使用することもできます。AlertDialogリファレンス

于 2012-08-14T02:28:23.437 に答える
1

アクティビティを開始せずにダイアログを開始することはできません。私はあなたが次のことをする必要があると思います:

  • スタイルをダイアログスタイルに変更する新しいアクティビティを作成します。
    • android:theme="@android:style/Theme.Dialog"
  • この新しいアクティビティでは、ユーザーが通知をクリックしたときに発生したいことをすべて追加します。
  • あなたがしたようにあなたの通知をそれにリンクしてください。

これで、通知をクリックすると、ダイアログが表示されます。

于 2012-08-14T02:18:41.393 に答える
1

finish();他のすべてのアクティビティの背後に再表示されないように、メインアクティビティから電話をかける必要があります。

ここでより適切に説明するダイアログスタイルのアクティビティを起動するときの予期しない動作

于 2012-08-16T19:35:54.580 に答える
1

私は自分の問題を解決しました。

最初に、以下のように2番目のアクティビティのマチフェストファイルに属性を追加しました。

android:launchMode="singleTask"

そして、通知から呼びかけている間、私は次のフラグをインテントに設定しました。

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

できます!!

于 2012-08-16T20:09:16.187 に答える
0

最初にアクティビティを開始しないと、ダイアログを開始できないと思います(これは、あなたがやろうとしていることだと思います)。

メインアクティビティをダイアログのようにスタイル設定することもできますが、そうでない場合は、アクティビティコンテキストを関連付けずにダイアログを開始することはできないと思います。

私はあなたの質問を誤解しているかもしれません。

于 2012-08-14T02:11:16.630 に答える
0

ポップアップウィンドウを試してから、そのポップアップウィンドウ内でレイアウトを膨らませることができます。または、android:theme = "@ android:style / Theme.Dialog"を使用して、実際にアクティビティであるときにダイアログの効果を取得します

于 2012-08-14T02:21:07.520 に答える
0

ダイアログアクティビティのマニフェストファイルに設定android:taskAffinityandroid:launchMode="singleTask"ます。この回答に対するすべてのクレジット。

于 2015-10-07T11:27:36.853 に答える