AndroidQ 어댑터 내에서 설치 로컬 폴더 아래 apk 열기

AndroidQ 어댑터 내에서 로컬 폴더에 apk 설치
Android Q(10) 이전에 로컬 폴더에 있는 파일의 코드를 엽니다.
public static void startInstall(Context context, File file) {
        Uri uri = Uri.fromFile(file);
        Intent intent = new Intent(Intent.ACTION_VIEW);
        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        intent.setDataAndType(uri, "application/vnd.android.package-archive");
        context.startActivity(intent);
}
	

Android Q(10)가 충돌하여 오류 메시지가 표시됩니다.
android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.VIEW dat=file:///storage/emulated/0/XXX/xx/xxxx.apk typ=application/vnd.android.package-archive }

위의 오류 원인: 1: Activity가 등록되지 않았거나 이 Activity 2가 없습니다. 조정하려는 응용 프로그램은 로컬에 3: URI의 파일 형식이 존재하지 않습니다. 4: URI에 대응하는 파일에 접근할 권한이 없습니다.
수정안: AndroidManifest.xml 추가

        
            
        

res/xml에 file 추가paths.xml 내용:


    
    


startInstall 메서드의 수정 사항:
public static void startInstall(Context context, File file) {
        if (Build.VERSION.SDK_INT >= 29) {
            Intent intent = new Intent(Intent.ACTION_VIEW);
            intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            Uri apkUri = FileProvider.getUriForFile(context, "XXX.xx.fileProvider", file);
            intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
            intent.setDataAndType(apkUri, "application/vnd.android.package-archive");
            try {
                context.startActivity(intent);
            } catch (Exception e) {
                e.printStackTrace();
            }
        } else {
            Uri uri = Uri.fromFile(file);
            Intent intent = new Intent(Intent.ACTION_VIEW);
            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            intent.setDataAndType(uri, "application/vnd.android.package-archive");
            context.startActivity(intent);
        }
 }

좋은 웹페이지 즐겨찾기