아래 코드는 서버에서 Base64를 인코딩해서 주었을때 해당String값을 이용해서 디코딩 하여 apk파일을 실행하는 코드이다.
byte[] decodedBytes = Base64.decode(apkInfo.FileDecode, Base64.DEFAULT);
// 2. 임시 파일 생성 및 저장
File tempFile = File.createTempFile("temp_apk", ".apk", context.getCacheDir());
FileOutputStream outputStream = new FileOutputStream(tempFile);
outputStream.write(decodedBytes);
outputStream.close();
// 3. Download 폴더에 파일 복사
File downloadDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS);
File apkFile = new File(downloadDir, apkInfo.FileName);
try (FileInputStream in = new FileInputStream(tempFile); FileOutputStream out = new FileOutputStream(apkFile)) {
byte[] buffer = new byte[1024];
int length;
while ((length = in.read(buffer)) > 0) {
out.write(buffer, 0, length);
}
}
// 4. 설치 진행
Uri contentUri = FileProvider.getUriForFile(context, "패키지명.provider", apkFile);
Intent installIntent = new Intent(Intent.ACTION_VIEW);
installIntent.setDataAndType(contentUri, "application/vnd.android.package-archive");
installIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_GRANT_READ_URI_PERMISSION);
context.startActivity(installIntent);
// 5. 임시 파일 삭제
boolean deleted = tempFile.delete();
if (deleted) {
// 파일 삭제 성공
Log.d("FileDelete", "임시 파일 삭제 성공");
} else {
// 파일 삭제 실패
Log.e("FileDelete", "임시 파일 삭제 실패");
}
4번의 FileProvider.getUriForFile의 두번째 파라미터는 Manifest.xml의 provider를 선언후 입력해야한다.
AndroidManifest.xml
<application
>
....
<provider
android:name="android.support.v4.content.FileProvider"
android:authorities="패키지명.provider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/provider_paths" />
</provider>
<application/>
@xml/provider_path
<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
<external-path name="external_files" path="."/>
</paths>
'프로그래밍 > Java' 카테고리의 다른 글
[Java] extends, implements, abstract 차이점 (1) | 2024.07.29 |
---|---|
[Java] Boolean과 boolean의 차이점 (0) | 2023.06.12 |
[Java] StringTokenizer를 이용해 문자열분리 (0) | 2023.05.05 |
[Java] Scanner / next() 와 nextLine() 차이 (1) | 2023.05.05 |
[Java] String to JsonArray 변환 (0) | 2023.04.13 |
댓글