Notice
Recent Posts
Recent Comments
Link
투케이2K
36. (TWOK/LOGIC) [Android] [출처 알 수 없는 앱 설치 허용] 앱 업데이트 여부 판단 및 앱 업데이트 수행 실시 - vnd.package-archive 본문
투케이2K 로직정리
36. (TWOK/LOGIC) [Android] [출처 알 수 없는 앱 설치 허용] 앱 업데이트 여부 판단 및 앱 업데이트 수행 실시 - vnd.package-archive
투케이2K 2023. 11. 7. 14:40[로직 정리]
정리 로직 : Android
상태 : [Android] [출처 알 수 없는 앱 설치 허용] 앱 업데이트 여부 판단 및 앱 업데이트 수행 실시 - vnd.package-archive
[설 명]
[1] : 알수 없는 앱 설치 권한 부여 상태 확인 : REQUEST_INSTALL_PACKAGES
[2-1] : [IF] : 알수 없는 앱 설치 권한이 부여 되어 있는 경우 : 앱 업데이트에 필요한 변수 선언 : String PackageName : AndroidManifest.xml 파일에 queries 등록 필요
[2-2] : [ELSE] : 알수 없는 앱 설치 권한이 부여 되지 않는 경우 권한 허용 창 Intent 이동 : ACTION_MANAGE_UNKNOWN_APP_SOURCES
[3] : 앱 마지막 업데이트 날짜 내역 확인
[4] : 새롭게 업데이트를 수행할 앱 버전이 있는 지 확인 실시 (Date 비교)
>> API 호출 후 업데이트 여부 판단 및 APK 파일 다운로드 후 앱 특정 경로 저장소에 저장
[5] : 새롭게 업데이트 할 버전이 있는 경우 팝업창 알림 표시
[6] : 사용자가 [앱 업데이트 진행] 버튼 클릭 수행 시 >> 기존에 저장 된 [앱 캐시 및 데이터] 초기화 수행 >> 다운로드 받은 APK 파일로 앱 Update 수행
[예시 소스 코드] :
// ---------------------------------------------------------------
// [로직 처리 실시]
// ---------------------------------------------------------------
try {
// [1] : 알수 없는 앱 설치 권한 부여 상태 확인
if (C_Permission.getAppInstallPermisseionEnable(A_Intro.this) == true){
// [2] : 앱 업데이트에 필요한 변수 선언
String packageName = "com.example.javaproject";
// [3] : 앱 마지막 업데이트 날짜 내역 확인
String appUpdateDate = C_App.appInstallUpdateTime(A_Intro.this, packageName);
// [4] : 새롭게 업데이트를 수행할 앱 버전이 있는 지 확인 실시 (Date 비교)
// [5] : 앱 업데이트 팝업창 알림 수행
String message = "Package : " + packageName + "\n\n" + "appUpdateData : " + appUpdateDate;
C_Ui_View.observableAlert(A_Intro.this, "알 림", message, "앱 업데이트", "닫기")
.subscribeOn(AndroidSchedulers.mainThread()) // [Observable (생성자) 로직을 IO 스레드에서 실행 : 백그라운드]
.observeOn(Schedulers.io()) // [Observer (관찰자) 로직을 메인 스레드에서 실행]
.subscribe(new Observer<Boolean>() { // [Observable.create 타입 지정]
@Override
public void onSubscribe(@NonNull Disposable d) {
}
@Override
public void onNext(@NonNull Boolean value) {
new Handler(Looper.getMainLooper()).postDelayed(new Runnable() {
@Override
public void run() {
if (value == true){ // [앱 업데이트 클릭]
// TODO [외부 저장소 경로 확인] : [외부 저장 시에는 파일 액세스 권한 필요]
String filePath = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).getAbsolutePath();
String folderName = "LOG_SAVE_FOLDER";
String fileName = "update_test.apk";
// TODO [다운로드 폴더에서 세부 경로 정의]
if (filePath.endsWith("/") == true){
filePath = filePath + folderName;
}
else {
filePath = filePath + "/" + folderName;
}
if (filePath.endsWith("/") == true){
filePath = filePath + fileName;
}
else {
filePath = filePath + "/" + fileName;
}
// TODO [앱 캐시 및 데이터 초기화]
C_App.clearAppCache(A_Intro.this);
C_App.clearAppData(A_Intro.this);
// TODO [프리퍼런스에 데이터 저장] : [데이터 및 캐시 초기화 후에 필요한 데이터 저장]
// TODO [apk 파일 업데이트 수행 실시 : 조건은 빌드를 수행한 프로젝트와 같은 패키지 명칭을 가진 동일 앱]
C_App.update_External_Apk_File(A_Intro.this, filePath);
}
}
}, 0); //1초뒤 실행 (작업 예약)
}
@Override
public void onError(@NonNull Throwable e) {
}
@Override
public void onComplete() {
}
});
}
else {
// [알수 없는 앱 설치 권한 부여 인텐트 이동]
Intent intent = new Intent(Settings.ACTION_MANAGE_UNKNOWN_APP_SOURCES);
intent.setData(Uri.parse("package:" + getPackageName()));
intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
startActivity(intent);
}
}
catch (Exception e){
e.printStackTrace();
}
반응형
'투케이2K 로직정리' 카테고리의 다른 글
Comments