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

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

글쓴이 : 이양생 날짜 : 2016-03-23 (수) 16:17 조회 : 8702
글주소 : http://www.androidside.com/B49/159456
 
  CJmall ARIAL
ARIAL, 인기 뷰티 브랜드, 핫아이템, CJ특가, 카드5%할인
www.cjmall.com
  SBS아카데미컴퓨터학원송강인
플래쉬디자인디자인전문학원, 취업연계, 진로상담, 맞춤교육진행
sbsartcenter.net
  플래쉬 전문개발 이지맵
이러닝콘텐츠개발, 플래시컨텐츠개발, 플래시애니메이션, 홍보애니메이션, 캐릭터제작
www.easymap.kr
신청하기


안드로이드, 자바 그리고 다양한 질문에 대해 성실히 답해드립니다. 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 변경사항 보러가기 챗방이 잘 안보이면 크롬에서 접속해주세요
챗방 숨기기 |  챗방 보이기