207

AlarmManager信号をブロードキャストするインテントをトリガーするために を使用しています。以下は私のコードです:

AlarmManager mgr = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
Intent i = new Intent(this, Wakeup.class);
try
{
    PendingIntent pi = PendingIntent.getBroadcast(this, 0, i, 0);
    Long elapsed +=  // sleep time;
    mgr.set(AlarmManager.RTC_WAKEUP, elapsed, pi);
}
catch(Exception r)
{
    Log.v(TAG, "RunTimeException: " + r);
}

からこのコードを呼び出しているActivityため、次のエラーがどのように発生するのかわかりません...

ERROR/AndroidRuntime(7557): java.lang.RuntimeException: Unable to start receiver com.wcc.Wakeup: android.util.AndroidRuntimeException: Calling startActivity() from outside of an Activity  context requires the FLAG_ACTIVITY_NEW_TASK flag. Is this really what you want?
4

10 に答える 10

517

Android のバージョンが Android - 6 未満の場合は、この行を追加する必要があります。それ以外の場合は、Android - 6 より上で動作します。

...
Intent i = new Intent(this, Wakeup.class);
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
...
于 2010-09-11T05:21:23.403 に答える
59

同じアクティビティの複数インスタンスの場合、次のスニペットを使用します。

:このスニペットは、私の外部で使用していActivityます。AndroidManifestファイルに が含まれていないことを確認してくださいandroid:launchMode="singleTop|singleInstance"。必要に応じて、に変更できますandroid:launchMode="standard"

Intent i = new Intent().setClass(mActivity.getApplication(), TestUserProfileScreenActivity.class);  
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_MULTIPLE_TASK);

// Launch the new activity and add the additional flags to the intent
mActivity.getApplication().startActivity(i);

これは私にとってはうまくいきます。希望、これは誰かのために時間を節約します。誰かがより良い方法を見つけたら、私たちと共有してください。

于 2012-03-10T11:15:22.273 に答える
13

あなたはあなたが呼ぶ部分を貼り付けませんでしたstartActivity、それは興味深い部分です。

コンテキスト内、またはコンテキスト内で呼び出している可能性がstartActivityあります。ServiceApplication

電話をかける前に猫を記録するために「this」を印刷startActivityし、それが何を指しているかを確認してください。誤って内側の「this」を使用する場合があります。

于 2012-05-29T08:43:03.013 に答える
1

次の行に変更してみてください。

PendingIntent pendingIntent = PendingIntent.getBroadcast(getContext(), 0, i, 0);
于 2013-03-20T16:56:11.243 に答える