총 게시물 38,772건, 최근 1 건 안내 RSS 글쓰기
이전글  다음글  목록 글쓰기
[안드로이드]

최상위에 내앱이 있는지 확인하는 방법

글쓴이 : 이양생 날짜 : 2016-03-23 (수) 16:17 조회 : 8280
글주소 : http://www.androidside.com/B49/159456
 
  CJmall ARIAL
ARIAL, 인기 뷰티 브랜드, 핫아이템, CJ특가, 카드5%할인
www.cjmall.com
  진화형전쟁RPG 퍼스트에이지
오리지널 RPG의 귀환! 지역쟁탈전, PK, 레이드 던전까지! 고퀄리티 웹RPG!
1a.topgame.kr
  최신게임추천 크라운
고퀄 취향저격 웹RPG, 성인PK, 원클릭전투! 문상이벤트! 최신게임추천
crown.nolzzang.com
신청하기


안드로이드, 자바 그리고 다양한 질문에 대해 성실히 답해드립니다. Q&A Jang

앱을 띄워놓고 홈키를 누르거나 다른어플을 켜는등

제가 만든 액티비티가 아닌곳에서 팝업창을 띄워주려고합니다.(카카오 네비같이)

액티비티메니져로 최상위 프로세스, 패키지, 액티비티 다 확인을 해봤는데

폰마다 바뀌는게 다르더라고요.

예를 들면 s6는 프로세스만 바뀌고 노트4는 다바뀐다던지

G4는 아무것도안바뀐다던지

심지어 한폰에서는 최상위 프로세스가 실행중인 앱이아니구요ㅠㅠ

어떻게 해결해야할까요..??

도와주세요ㅠㅠㅠ



질문자가 자신의 포인트 5 점을 걸었습니다.
답변하시면 포인트 2을, 답변이 채택되면 포인트 4을 드립니다.

질문답변 게시판에서 궁금한 사항을 해결하셨다면, 애써 답변해주신 분께 잘 되었다고 따뜻한 댓글 한마디 남겨주세요.
그리고 답변해주신 분의 글을 '추천' 해주세요.
추천받으신 분에게 1포인트가, 추천하신 분에게도 1포인트가 적립됩니다. ^^

니모니모 2016-03-24 (목) 09:32 추천추천 2 반대 0
//현재 실행중인 프로세스
ActivityManager actMng = (ActivityManager)getApplicationContext().getSystemService(Context.ACTIVITY_SERVICE);
List<RunningAppProcessInfo> list = actMng.getRunningAppProcesses();
String packageName = "";
for(RunningAppProcessInfo rap : list)
{
System.out.println("packageName = "+packageName+", importance = "+rap.importance );   
    if(rap.importance == rap.IMPORTANCE_FOREGROUND){
packageName = rap.processName;
System.out.println("packageName = "+packageName);
return;
}
}

getRunningTasks : 현재 deprecated 된 함수입니다. 
getRunningAppProcesses : Activity 명까지는 얻어오진 못해도 현재 실행중인 프로세스 리스트를 알수있어요~!(패키지명)
RunningAppProcesses(rap) 여기서 IMPORTANCE_FOREGROUND 이거로 한번 걸러내면 현재 FOREGROUND 실행중인 앱 목록이 나옵니다. 거기서 본인의 앱의 패키지명과 일치한지 않한지 비교하면되겟네요~!

궁금하시면 저기 if문 밖에서 로그한번 찍어보시면 어떤정보가 어떤 순서로찍히는지 볼수있는지 알거에요. 
System.out.println("packageName = "+packageName+", importance = "+rap.importance );

초초보개발좌 2016-03-23 (수) 16:40
질문을 잘몰르겠지만 한마디로 앱실행하고 홈이나 나가있을때 예를들어 다른앱을 실행중일때 나  언제든 팝업창을 보여주고싶은거면

service 이용하시면 되는거 아닌가요?
댓글주소 추천 0 반대 0
     
     
이양생 2016-03-23 (수) 16:55
[@초초보개발좌]
서비스를 이용해서 감시하고있다가 그 감시하는것을 어떤걸 감시야될지모르겠네요...
프로세스 엑티비티 패키지 다 제각각으로 놀고있으니...ㅠㅠ
댓글주소 추천 0 반대 0
초초보개발좌 2016-03-23 (수) 16:48
http://daddycat.blogspot.kr/2011/08/android-service-alerdialog.html 링크걸어드려요
댓글주소 추천 0 반대 0
     
     
이양생 2016-03-23 (수) 16:57
[@초초보개발좌]
다이얼로그가아니라 서비스를 이용해서 최상위 팝업창을 만들었거든요 그걸 띄우고싶어서요...
댓글주소 추천 0 반대 0
초초보개발좌 2016-03-23 (수) 17:02
service 로 백단에서 계속 지켜보시다가 웹서버에서 어떤특정값을 리턴받아서 처리하셔야될듯하네요???
댓글주소 추천 0 반대 0
     
     
이양생 2016-03-23 (수) 17:17
[@초초보개발좌]
서버에서요??
구체적으로 설명해주실수있을까요...??ㅠㅠ
폰내부에서 어떤화면에 있는지 확인하는건데
웹서버까지 가야되나요??ㅠㅠ
댓글주소 추천 0 반대 0
          
          
이양생 2016-03-23 (수) 17:24
[@초초보개발좌]

while (true) {
while (observer) {

if (!isForegrdound()) {

Message msg = handler.obtainMessage();
handler.sendMessage(msg);
}
}
}

public boolean isForegrdound()
{
ActivityManager am = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
List<ActivityManager.RunningTaskInfo> list = am.getRunningTasks(1);
ComponentName cn = list.get(0).topActivity;
String name = cn.getPackageName();

return name.indexOf(getPackageName()) > -1;
}

이런식으로 코드를짰습니다
여기서는 패키지만봤지만
엑티비티, 패키지, 프로세스 조합도해보고 따로도해봤는데 잘안되네요
댓글주소 추천 0 반대 0
초초보개발좌 2016-03-23 (수) 17:52

ActivityManager am = (ActivityManager)getSystemService(Context.ACTIVITY_SERVICE);
List<RunningTaskInfo> Info = am.getRunningTasks(1);
ComponentName topActivity = Info.get(0).topActivity;
String topactivityname = topActivity.getPackageName() 이거보시고 하신거같은데요~혹시 퍼미션 주셧나요?

  android.permission.GET_TASKS
댓글주소 추천 0 반대 0
     
     
이양생 2016-03-23 (수) 18:01
[@초초보개발좌]
퍼미션줬구요 
에러뜨거나 에러뜨고 이런게 아니라
폰에서 내앱이 화면에 떠있는지를 알수있는방법을 모르겠어요ㅠㅠㅠㅠ
댓글주소 추천 0 반대 0
          
          
초초보개발좌 2016-03-23 (수) 18:01
[@이양생] http://stackoverflow.com/questions/3873659/android-how-can-i-get-the-current-foreground-activity-from-a-service

이게 최선인거같아요~한번보셔야할듯
댓글주소 추천 0 반대 0
니모니모 2016-03-24 (목) 09:32
베플로 선택된 게시물입니다.
//현재 실행중인 프로세스
ActivityManager actMng = (ActivityManager)getApplicationContext().getSystemService(Context.ACTIVITY_SERVICE);
List<RunningAppProcessInfo> list = actMng.getRunningAppProcesses();
String packageName = "";
for(RunningAppProcessInfo rap : list)
{
System.out.println("packageName = "+packageName+", importance = "+rap.importance );   
    if(rap.importance == rap.IMPORTANCE_FOREGROUND){
packageName = rap.processName;
System.out.println("packageName = "+packageName);
return;
}
}

getRunningTasks : 현재 deprecated 된 함수입니다. 
getRunningAppProcesses : Activity 명까지는 얻어오진 못해도 현재 실행중인 프로세스 리스트를 알수있어요~!(패키지명)
RunningAppProcesses(rap) 여기서 IMPORTANCE_FOREGROUND 이거로 한번 걸러내면 현재 FOREGROUND 실행중인 앱 목록이 나옵니다. 거기서 본인의 앱의 패키지명과 일치한지 않한지 비교하면되겟네요~!

궁금하시면 저기 if문 밖에서 로그한번 찍어보시면 어떤정보가 어떤 순서로찍히는지 볼수있는지 알거에요. 
System.out.println("packageName = "+packageName+", importance = "+rap.importance );

댓글주소 추천 2 반대 0
     
     
이양생 2016-03-24 (목) 14:17
[@니모니모]
감사합니다 알려주신 소스 토대로해서 해결했네요~~
댓글주소 추천 0 반대 0
     
     
이양생 2016-03-24 (목) 15:39
[@니모니모]
죄송한데요
if(rap.importance == rap.IMPORTANCE_FOREGROUND)
이조건문 어떤의미 인지 설명해주실수있을까요??ㅠㅠ
댓글주소 추천 0 반대 0
     
     
탄약 2016-07-27 (수) 20:35
[@니모니모]
감사합니다
댓글주소 추천 0 반대 0
김병희라고요 2017-05-19 (금) 16:07
좋은 토론 페이지가 되었네요.
찬찬히 보아야겠습니다.
감사합니다.
댓글주소 추천 0 반대 0
이전글  다음글  목록 글쓰기

 


Copyright ⓒ www.androidside.com. All rights reserved.
채팅 권한: 글쓰기 1개
2레벨 이상만 대화 가능
공개 채팅: 평일 !(9시 ~ 17시),토,일
안사2 변경사항 보러가기 챗방이 잘 안보이면 크롬에서 접속해주세요
챗방 숨기기 |  챗방 보이기