마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

외부 스키마,앱에서 데이터받아서 처리할때 질문

0 추천
안녕하세요

 

다른앱에서 현재 개발중인 앱을 열때요.

인텐트필터로 데이터받는 액티비티에서 해당데이터가있으면 본 액티비티를 호출할때, 데이터를 넣어 같이

호출하도록 되어있습니다. 없으면 그냥호출 하구요. (공유하기 링크를 타고 현재 앱으로 스키마를 통해 여는 중입니다. 스키마://스키마?파라미터.. 이런식으로요)

 

문제는, 여기서 본액티비티에서 작업을 다하고 앱을 종료했을때,

백그라운드에 남아있잖아요?

 

그 상태에서 백그라운드에 있는 앱목록에서 다시 이 앱을 실행시키면 외부에서 가져온 데이터를 다시 갖고있는것으로 인식해서, 처음페이지만을 열고싶은데, 해당 데이터가 있으면 작동하는 로직으로만 실행이 된다는겁니다.
 

제가 원하는건, 처음 외부앱에서 공유하기를 통해 데이터를 갖고왔으면 그 작업을 수행하고..

이 후 백그라운드에서 다시 실행했을땐 그작업을 하지 말고, 일반 앱 처음열었을 때처럼 하는거거든요.

 

그렇다고 스키마를 던져주는 페이지에서 데이터를 안줄수도 없고, 데이터를 계속 갖고있는 상태에서 앱이 완전종료된게 아니라서.. 누를때마다 데이터를 갖고있는 걸로 인식하는것 같습니다.ㅠㅜ

 

생각해본건

 처음 열리는 인텐트 액티비티에서 지금 열린게 처음인지 백그라운드인지를 감지하는 방법이 맞는거 같은데..

방법이이을까요??

 

조언 부탁드립니다(__)
겸군님 (1,900 포인트) 님이 2018년 5월 3일 질문
겸군님님이 2018년 5월 4일 수정
sorry if I bother you. but I want to display a game for child and their parents can play together: http://rolltheball.co/

2개의 답변

0 추천

제가 원하는건, 처음 외부앱에서 데이터를 갖고왔으면 그 작업을 수행하고.. 

이 후 백그라운드에서 다시 실행했을땐 그작업을 하지 말라는거거든요.

==> 외부에서 데이터를 BroadcastReceiver 로 전달 받은 후 onReceive 에서 처리를 끝내면 되는거 아닌가요? 먼가 해당 데이터로 연계하는 부분이 있는걸까요? 

aucd29 (218,390 포인트) 님이 2018년 5월 4일 답변
그 최근사용중인 앱들 목록에서 앱을 다시 클릭해서 들어왔을 때, 그 데이터를 계속 갖고있으면서 재시작을 하는게 문제에요.. ㅠㅜ

브로드캐스트로 받거나, 인텐트로 받거나, 웹에서 스키마://스키마?파라미터로 받거나.. 모든 추가데이터를 받았을 때, 받은 처리를 하는 부분은 문제가 없는데..

완전히 종료하지 않은, 백그라운드에 있는 최근 앱목록에서 앱을 다시 들어오면, 그 추가 데이터가 있는 상태로 인식되어, 계속 그 작업을 하는게 문제에요 ㅠ

제가 원하는건, 처음에는 외부앱 데이터 갖고왔으니 onReceive()를 수행하는게 맞죠!
그리고 앱을 사용하다 종료했는데(사용자가 완전히 끈 것이 아니라, 개발자가 써놓은 finish같은), 이후에 네모 버튼 눌러서 다시 실행중인 앱에서 클릭해 들어오면 또 onReceive()가 도니까 ㅠㅜ 그때는 그냥 앱처음실행한것처럼만 하고 싶거든요.

카카오톡같은애들이 그렇게 해놨는데, 제거는 계속 데이터가 있으니까 그 작업을 똑같이해요.. 처음페이지 이동이 안된달까.
그 추가 데이터가 있는 상태로 인식되어
==> 이게 선 조건하는게 데이터를 어디엔가 보관하고 있다는 의미인데 보관하지 않으면 어떤 문제라도 있는건가요?

네모 버튼 눌러서 다시 실행중인 앱에서 클릭해 들어오면 또 onReceive()가 도니까
==> onReceive 는 Resume  했다고 해서 전달되지 않습니다.
답변 감사합니당 :)

지금 앱이 맨처음 실행되는게, intro 액티비티인데요.
얘는 인트로 이미지 딜레이주면서,  데이터도 넘어왔으면 본 액티비티에 심어서 같이 넘겨주는 역할을 하거든요. 없으면 안넘겨주구요.

그래서 본 액티비티에서는 데이터를 넘겨받았으면, 뷰를 조작해서 새로운 뷰를 띄운다거나 하는 작업이 있는데요. 제가 원하는건 처음에는 다른 외부앱에서 실행하면, 데이터가 있으니까 데이터를 본 액티비티에 넣어서 startActivity하고, 작업을 하는건 좋은데..

그 이후에 앱 종료하고, 실행중인 앱 목록에서 다시 이 앱을 실행시키면 처음 intro작업한다는 그 액티비티의 onCreate부터 다시 돌아서, 데이터를 있는 것으로 인식하고, 본 액티비티에서 똑같은 작업을 또 한다는거거든요. 앱을 완전히 종료하고 하면(드래그로 밀어서 종료하는)이 문제는 없지만,

실행중인 앱들에서 실행하면 다시 또 그 작업을하니까 ㅠㅜ 방법이 없을까요?
외부에서 들어왔을때는 그 작업을 한번만 하구.. 실행중인 앱들에서 들어올땐 그 갖고온 데이터를 처리안했으면 하거든요 ㅠ
인트로로 시작 하지 마시고 메인 액티비티의 onCreate 에서 인트로를 호출 하는식으로 변경해보세요

근데 데이터가 있어서 그런게 아니고 초기 런칭되는 액티비티가 destroyed 된 상태라 다시 띄우는 걸로 보이네요

외부에서 전달되는 데이터도 메인에서 받으세요
답변 감사합니다 !! 조금 늦었어요 ㅠㅜ
일단 말씀해주신것처럼,

인트로 액티비티에서는 메인액티비티를 startactivity하면서 destroy가 되기때문에..
다시 외부앱에서 인트로액티비티 호출할때 destroy되어서 onCre때문에 도는것일수있겠네요.

오늘 예제로 해보면서 테스트 해보겠습니다 감사해요!
되면 또 감사인사하러오겠습니당!
0 추천

제가 주로 쓰는 함수 공유드립니다.

RecentApp 목록을 터치하여 들어올 때가 true 입니다.

protected boolean wasLaunchedFromRecents() {
    return (getIntent().getFlags() & Intent.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY) == Intent.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY;
}
코딩인헬 (12,150 포인트) 님이 2018년 5월 4일 답변
감사합니다 :)

이게 최근앱에서 들어왔을 때 동작하는군요.

근데 제가 최근앱에서 누르는게, 지금 작업중인 앱이아니라, 다른앱에서 공유하기 링크로 타고 들어오는거라 ㅠㅜ 다 false로 받아들이네요. ㅠㅜㅠ

백그라운드 감지로 되는게 아니었다니 ㅠㅜ
...