2

これが同様の質問の重複ではないことを願っていますが、私を助けてくれるものを見つけることができませんでした。

私は簡単なエッグタイマーを作成していますが、それは非常にうまく機能します。私は一つのことに苦労していますが。タイマーが切れると、アラームが開始され、ダイアログとして表示されるアクティビティがポップアップ表示されます。これは私が開いたアプリの場合にのみ発生しますが。別のアプリを開いてもアラームが鳴っても何も起こりません。

だから私の質問は、ユーザーが何をしていてもダイアログをポップアップさせるにはどうすればよいですか?

現時点では、ダイアログを表示するための私の方法は次のようになります。

private void ShowTimesUp(){
    Intent dialogIntent = new Intent(getBaseContext(), TimesUpDialog.class);
    dialogIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    startActivityForResult(dialogIntent, 1);
}

マニフェストは次のようになります。

    <activity android:name=".Home"
              android:label="@string/app_name">
        <intent-filter>
            <action android:name="android.intent.action.MAIN"/>
            <category android:name="android.intent.category.LAUNCHER"/>
        </intent-filter>
    </activity>

    <activity android:name=".TimesUpDialog" android:theme="@android:style/Theme.DeviceDefault.Dialog"></activity>
4

1 に答える 1

1

これを試して:

public static final int TIMEOUT = 60 * 1000;

..。

Intent dialogIntent = new Intent(getBaseContext(), TimesUpDialog.class);
    dialogIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

PendingIntent intent = PendingIntent.getActivity(YourApplication.getInstance().getBaseContext(), 0,
            dialogIntent, dialogIntent.getFlags());

AlarmManager mgr = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
mgr.set(AlarmManager.RTC, System.currentTimeMillis() + TIMEOUT, intent);

他のタイマーロジックは必要ないと思います。

PS:私はこれをテストしませんでした、それが役立つことを願っています。

編集:以下のコメントで言及されている質問の可能な解決策

今、私は、AlarmManagerによって開始されたインテントから結果を得ることが可能かどうか疑問に思っていますか?

上記のコードは次のように変更する必要があります。

Intent startApplicationIntent = new Intent(getBaseContext(), MainActivity.class);
    dialogIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startApplicationIntent.putExtra(START_DIALOG, true);

PendingIntent intent = PendingIntent.getActivity(YourApplication.getInstance().getBaseContext(), 0,
            startApplicationIntent, startApplicationIntent.getFlags());

AlarmManager mgr = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
mgr.set(AlarmManager.RTC, System.currentTimeMillis() + TIMEOUT, intent);

これで、MainActivityonStart()メソッドで次のことができます。

boolean startDialog = getIntent().getBooleanExtra(START_DIALOG, false);
if (startDialog) {
    Intent dialogIntent = new Intent(MainActivity.this, TimesUpDialog.class);
    startActivityForResult(dialogIntent, REQUEST_CODE_CONSTANT);
}

ここSTART_DIALOGで、はインテント追加値のキーを定義する文字列定数であり MainActivity、はランチャーアクティビティです。

これがあなたのために働くことを願っています。

于 2013-03-27T13:47:40.513 に答える