FC2ブログ

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

[Android] BroadcastReceiverからActivityのStartをする

BroadcastReceiverクラスを継承したクラスのonReceive()に以下のような実装をしてActivityをStart使用としたら、
エラーが発生してしまった。

Intent intent=new Intent();
intent.setClassName(context.getPackageName(), context.getPackageName() + ".SampleActivity");
context.startActivity(intent);


★エラー内容(LogCatの出力)
-------------------------------------------
05-21 11:40:56.471: E/AndroidRuntime(19117): FATAL EXCEPTION: main
05-21 11:40:56.471: E/AndroidRuntime(19117): java.lang.RuntimeException: Unable to start receiver jp.sample.test.SampleReceiver: android.util.AndroidRuntimeException: Calling startActivity() from outside of an Activity context requires the FLAG_ACTIVITY_NEW_TASK flag. Is this really what you want?
05-21 11:40:56.471: E/AndroidRuntime(19117): at android.app.ActivityThread.handleReceiver(ActivityThread.java:2821)
05-21 11:40:56.471: E/AndroidRuntime(19117): at android.app.ActivityThread.access$3200(ActivityThread.java:125)
05-21 11:40:56.471: E/AndroidRuntime(19117): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2083)
05-21 11:40:56.471: E/AndroidRuntime(19117): at android.os.Handler.dispatchMessage(Handler.java:99)
05-21 11:40:56.471: E/AndroidRuntime(19117): at android.os.Looper.loop(Looper.java:123)
05-21 11:40:56.471: E/AndroidRuntime(19117): at android.app.ActivityThread.main(ActivityThread.java:4627)
05-21 11:40:56.471: E/AndroidRuntime(19117): at java.lang.reflect.Method.invokeNative(Native Method)
05-21 11:40:56.471: E/AndroidRuntime(19117): at java.lang.reflect.Method.invoke(Method.java:521)
05-21 11:40:56.471: E/AndroidRuntime(19117): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:870)
05-21 11:40:56.471: E/AndroidRuntime(19117): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:628)
・・・
05-21 11:40:56.471: E/AndroidRuntime(19117): ... 10 more
-------------------------------------------

★原因
Activity以外からActivityを起動する場合は、FLAG_ACTIVITY_NEW_TASK を設定しろとのこと。
エラーログにしっかり、出てました。



★対処
以下の1行を追加。フラグを指定するようにした。

intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

これで、例外が発生することなく、画面起動ができました。




コメントの投稿

非公開コメント

プロフィール

hiiro

Author:hiiro

最新記事
カテゴリ
月別アーカイブ
最新コメント
最新トラックバック
検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QR
Counter
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。