안녕하세요~
개발자분들, 불철주야 개발 하시느라 고생들이 많으십니다.
다름이 아니오라,
앱을 실행시키자 마자 이 앱의 버전을 체크하여 홈페이지에 상위버전이 있으면,
sdcard 로 apk 파일을 다운받아 업데이트 하는 부분을 개발하고 있습니다.
근데, 여기나 구글링을 해 보면, 대부분
Uri installUri = Uri.fromParts("package", "xxx", null);
Intent intent = new Intent(Intent.ACTION_PACKAGE_ADDED, installUri);
달랑 이렇게 올라와 있더군요.
1.
실제
Uri installUri = Uri.fromParts("package", "/sdcard/SafeSmart.apk", null);
Intent intent = new Intent(Intent.ACTION_PACKAGE_ADDED, installUri);
startActivity(intent);
이런 식으로 구현 해 보면,
Caused by: android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.PACKAGE_ADDED dat=package:%2Fsdcard%2FSafeSmart.apk }
at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1408)
at android.app.Instrumentation.execStartActivity(Instrumentation.java:1378)
at android.app.Activity.startActivityForResult(Activity.java:2825)
at android.app.Activity.startActivity(Activity.java:2931)
이렇게 에러가 뜨고
AndroidMenifest 도
...
...
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.PACKAGE_ADDED" />
<data android:scheme="package"/>
</intent-filter>
...
...
이 부분 넣어주고 해 봤습니다만, 제가 너무 무지해서당최 잘 모르겠네요
2.
Intent intent = new Intent(Intent.ACTION_VIEW ,Uri.parse("/sdcard/SafeSmart.apk"));
startActivity(intent);
이 방식도 마찬가지로 같은 에러가 떨어지구요~
3.
File apkFile = new File("/sdcard/SafeSmart.apk");
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.fromFile(apkFile), "application/vnd.android.package-archive");
startActivity(intent);
이 방식은 설치하는게 나오고 실행되기는 하는데... 현재 앱이 실행 중이라 그런건지 '패키지가 설치되지 않았습니다.' 라는 구문이 뜨더라구요..
apk 파일은 정상적인것을 확인은 했습니다만... 암만 찾아봐도 해결 방법을 모르겠습니다.
고수님들의 답변 기다리겠습니다.
항상 행복하세요~




- 자답 입니다.
웹 상으로 떠도는 아래의 방식은
Uri installUri = Uri.fromParts("package", "/sdcard/SafeSmart.apk", null);
Intent intent = new Intent(Intent.ACTION_PACKAGE_ADDED, installUri);
startActivity(intent);
이것만 가지고는 안될듯 하구요, 인텐트 필터 쪽에 뭔가 맞춰줘야 될 듯 합니다. 이건 좀 공부를 해 봐야 겠고...
File apkFile = new File("/sdcard/SafeSmart.apk");
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.fromFile(apkFile), "application/vnd.android.package-archive");
startActivity(intent);
이 방식을 사용했을때 설치가 실패하는 문제는 업데이트 버전은 패키지가 서명 되어있는것이고, 디버깅 모드의 앱에서 서명된 패키지를 업데이트 하려고 하니 안되는 거였습니다. 둘 다 서명된 것으로 하면 패키지 업데이트가 잘 되더군요. 참고하시길 바랍니다.