안녕하세요~ 여러분~~
오늘은 앱에서 다른앱 여는 코드를 볼껀데요~
사실 안드로이드 스튜디오에서 검색하면 방법은 다 나와있습니다.~ 하지만 제가 알려드리고 싶은건,
앱이 분명 내 폰에 있는데도 해당 코드를 사용했을때, 앱이 안켜지는 현상이 있다는 거에요.
예를들면 배민, 탄탄, 은행앱 등등 분면 내 폰에 앱이 깔려있는데, 구글이나 Developer에 있는 코드를 활용하면 안열리는 경우가 있는데요. 이를 위해 제가 공부한 부분을 알려드릴게요~ 물로 다른분의 제공한 코드를 바탕으로 작성한겁니다.
//밑에 함수를 바탕으로 동작하는 코드
if(searchAppPackage(Choicedelivery.this,"com.sampleapp")==1){
LaunchApp(Choicedelivery.this, "com.sampleapp");
Log.d("TAG","Choicedelivery App is on the phone");
}else{
GotoInstall(Choicedelivery.this,"com.sampleapp");
Log.d("TAG","Choicedelivery App is not on the phone");
}
Log.d("TAG","Choicedelivery App "+searchAppPackage(Choicedelivery.this,"com.sampleapp") );
// 해당앱이 내 폰에 깔려있는지 확인하는 함수
public static int searchAppPackage(Context context, String packagename){
int checkapp = 0;
PackageManager PM = context.getPackageManager();
List<ResolveInfo> applist;
Intent intentgetapplist = new Intent(Intent.ACTION_MAIN, null);
intentgetapplist.addCategory(Intent.CATEGORY_LAUNCHER);
applist = PM.queryIntentActivities(intentgetapplist, 0 );
try{
for(int i =0; i< applist.size(); i++){
if(applist.get(i).activityInfo.packageName.startsWith(packagename)){
checkapp = 1;
Log.d("TAG","Choicedelivery Check for");
break;
}else{
Log.d("TAG","Choicedelivery Check for: " + applist.get(i));
}
}
}catch (Exception e){
checkapp = 2;
Log.d("TAG","Choicedelivery error");
e.printStackTrace();
}
return checkapp;
}
//현재 앱에서 다른앱을 실행하는 함수
public static void LaunchApp (Context context, String packagename){
Intent launchapp = context.getPackageManager().getLaunchIntentForPackage(packagename);
launchapp.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(launchapp);
}
//실행하고자 하는 앱이 없을경우 구글플레이스토어에 설치 경로까지 가는 함수
public static void GotoInstall (Context context, String pakagename ){
String url = "market://details?id="+pakagename;
Intent gotoplaystore = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
gotoplaystore.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(gotoplaystore);
}
자 여기 코드를 보시면 함수 사용 시 packagename 부분에 제가 com.sampleapp 이라고 적었는데~ 이는 '배달의 민족' 실행 경로 입니다.
저렇게 하고 동작시키면, 제 폰에 배달의 민족 앱이 있음에도 켜지지 않고 설치창으로 넘어가게 됩니다.
그래서 저는 로그 자료를 분석한 결과,,
searchAppPackage 함수의
intentgetapplist.addCategory(Intent.CATEGORY_LAUNCHER);
이부분을 로그로 살펴 보았습니다. 저부분에서 제 폰의 모든앱의 intent-filter 관련된 정보를 수집하여
List에 넣는건데요.
Log.d("TAG","Choicedelivery Check for: " + applist.get(i));
를 통해 살펴보니, com.sampleapp 이라는 배달의 민족 실행경로가 List에 저장이 안됬었습니다...
배문 뿐 아니라 깔려있는 앱중 없는 앱들이 꽤 있었습니다.
자료중
2021-12-06 00:03:49.671 945-945/com.coin.whichfood D/TAG: Choicedelivery Check for: ResolveInfo{60a648b com.kakao.talk/.activity.SplashActivity m=0x108000}
처럼 com.kakao.talk 이 있는게 보여 카카오톡은 실행이 되나 테스트 해보니 잘 됐습니다.
즉,
intentgetapplist.addCategory(Intent.CATEGORY_LAUNCHER);
이 코드에서 내 폰의 모든 앱 중 정보를 담지 못한 앱이 있으면 그 앱은 실행이 되질 않습니다.
해당 Intent.CATAGORY_LAUNCHER 라는 인자중 Intent.CATAGORY_DEFAULT 라는 인자도 있는데, 이 인자를 사용하면 더 많은 앱 실행 경로를 List에 저장했지만, 여전히 배민 및 다른 몇몇 앱들의 실행 경로는 List 저장되지 않았습니다.
과연 어떤 인자를 사용해야 내 폰에 있는 모든 앱의 모든 실행 경로를 담을 수 있을까요?
지금 찾는중입니다.
'IT기술(코딩) > 안드로이드스튜디오' 카테고리의 다른 글
adb이용해서 안드로이드 앱에 한글 입력하기 (1) | 2023.11.28 |
---|---|
코틀린stomp parsemessage 분석하기. websocket에서 stomp으로 데이터 알맞게 전송하기 nodejs (0) | 2023.06.06 |
안드로이드 스튜디오 핀치 완벽 함수! 그냥 복붙해서 인자만 넣고 갖다써요. 이미지가 크면 화면크기에 맞춰져서 나옵니다. 이미지 확대 축소 기능 핀지 자바버전 슬라이드 무시, 스크롤 무시.. (0) | 2022.01.13 |
안드로이드 스튜디오 앱에서 다른 앱 열기 안열릴때, 앱 있는데 안열릴때2 해결방법 찾음 (0) | 2021.12.06 |
java 안드로이드 스튜디오 이미지 사이즈 축소 및 이지미 용량 축소 감소 조절 함수 (0) | 2021.11.30 |