ERROR/AndroidRuntime(): android.util.AndroidRuntimeException: Calling startActivity() from outside of an Activity   context requires the FLAG_ACTIVITY_NEW_TASK flag. Is this really what you want? 

신년에서 몇일 되지도 않았는데, 이런 에러와 직면했습니다. 에구구구...
처음만나는 녀석이군요.

이 에러가 발생한 겨우는....
ListView의 "한 아이템을 클릭했을 경우, startActivity를 사용해 새로운 Activity를 생성하려 했을 때" 였습니다.



에러를 살펴보니,

Calling startActivity() from outside of an  Activity 
액티비티가 아닌곳에서 startActivity()를 사용했습니다.
context requires the FLAG_ACTIVITY_NEW_TASK flag.
컨텍스트는 FLAG_ACTIVITY_NEW_TASK 플래그가 필요합니다.
Is this really what you want? 
그런데도 당신이 진짜 이걸 원하는 겁니까?!!!

욱! 요녀석 만만치 않군요. 뭔가 무서운느낌이 듭니다.
어쨋든 중요한 부분은 FLAG_ACTIVITY_NEW_TASK 입니다.

새로운 TASK를 만들어서 쓰라는 얘기군요.







1. FLAG_ACTIVITY_NEW_TASK를 사용한 해결

굵게 표시된 코드를 추가한다면 해결이 됩니다.
Intent intent = new Intent(context, 새로생성할액티비티.class);
intent.putExtras(extras);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

context.startActivity(intent); 








2. PendingIntent를 사용한 해결


이녀석과 관련하여 다른 용도로 쓰는 방법도 있습니다.
바로 서비스에서 액티비티를 생성할때 입니다.

서비스도 Activity가 아니므로, 이런 에러가 발생할 수 있습니다.
이럴때, PendingIntent를 사용해 해결 할 수 있습니다.
(보통 여러 예제들이나 코드를 둘러보아도, 서비스는 PendingIntent를 사용합니다.)

PendingIntent는 자동으로 FLAG_ACTIVITY_NEW_TASK를 해준다고 하는군요.

서비스의 경우 아래와 같이 PendingIntent를 사용하면 해결이 됩니다.
Intent intent = new Intent(context, 새로생성할액티비티.class);

PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, 0);

try
{
pendingIntent.send();
}
catch(CanceledException e)
{
e.printStackTrace();
}
 











아이유 어플리케이션 - 아이유 팬플 다운로드 URL
(안드로이드 마켓으로 연결됩니다.)
Posted by croute

댓글을 달아 주세요

  1. 나그네 2017.06.12 09:52  댓글주소  수정/삭제  댓글쓰기

    감사합니다!!!