Android는 Word, Excel, PPT, PDF 등의 문서를 타사 소프트웨어로 엽니다.

6666 단어 엉터리 필치
최근에 회사에서 PDF 형식을 응용 프로그램에서 열어서 조회해야 한다는 요구가 하나 있는데 Word, Excel의 요구가 높지 않으면 제3자 소프트웨어로 직접 열면 된다. 두 가지 해결 방법을 찾았다.
첫째, 모두 앱에서 열고 텐센트에 접속할 수 있는 TBS(시도는 하지 않음), 링크를 참고하여 TBS 글에 접속할 수 있습니다
둘째, PDF는 안드로이드 pdfViewer를 사용하여 앱에서 다운로드하여 열면 되고,Word, Excel을 다운로드한 후 제3자 소프트웨어로 바로 이동하여 열면 된다.
나는 두 번째 방법을 선택했으니 나중에 틈이 나면 첫 번째 해결 방법을 다시 시도해 보자.
상기 두 가지 방법은 모두 먼저 파일을 다운로드한 다음에 열어서 조회해야 한다. 다운로드한 해결 방안은 여기서 설명하지 않는다. 인터넷에 매우 많다. 내가 사용한 것은 랴오쯔요의 제3자 프레임워크인 OkDownload이다. 랴오쯔요 GitHub은 배울 수 있고 개인적인 느낌은 그래도 매우 유용하다.
여기에는 주로 열기 방법과 주의해야 할 점을 기록하고 싶다.
Google 공식 설명에 따르면 Google 7.0에 개인 디렉터리 접근 권한이 추가되었습니다. 개인 파일의 안전성을 높이기 위해 안드로이드 7.0 또는 더 높은 버전의 응용 프로그램에 대한 개인 디렉터리 접근이 제한되었습니다. (0700)이 설정은 개인 파일의 메타데이터 유출을 방지합니다.따라서 다운로드한 파일 저장 경로에 접근할 때 시스템 버전에 파일 읽기 권한을 추가하는 것을 동태적으로 판단하고 FileProvider로 경로를 가져와야 한다. 그렇지 않으면 FileUriExposedException 이상을 촉발할 수 있다.
다음은 파일 유형을 여는 세 가지 쓰기 방법을 보여 줍니다.
private void openFileIntent(String path, String type) {
        if (!StringUtils.isNullOrWhiteSpace(path)) {
            Intent intent = new Intent("android.intent.action.VIEW");
            intent.addCategory("android.intent.category.DEFAULT");
            Uri uri;
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
                uri = FileProvider.getUriForFile(getActivity(), getApplicationContext().getPackageName() + ".provider", new File(path));
                intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);//         ,    
            } else {
                uri = Uri.fromFile(new File(path));
            }
            intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            try {
                if (StringUtils.isEqual(type, "doc")) {
                    intent.setDataAndType(uri, "application/msword");
                    this.startActivity(intent);
                    this.finish();
                } else if (StringUtils.isEqual(type, "xls")) {
                    intent.setDataAndType(uri, "application/vnd.ms-excel");
                    this.startActivity(intent);
                    this.finish();
                } else if (StringUtils.isEqual(type, "ppt")) {
                    intent.setDataAndType(uri, "application/vnd.ms-powerpoint");
                    this.startActivity(intent);
                    this.finish();
                }
            } catch (Exception e) {
                MessageUtils.showCusToast(getActivity(), "              ");
                finish();
            }
        }
    }

setDataAndType 설정에 대한 값을 기록합니다.
   private final String[][] MIME_MapTable = {
            //{   ,MIME  }
            {".3gp", "video/3gpp"},
            {".apk", "application/vnd.android.package-archive"},
            {".asf", "video/x-ms-asf"},
            {".avi", "video/x-msvideo"},
            {".bin", "application/octet-stream"},
            {".bmp", "image/bmp"},
            {".c", "text/plain"},
            {".class", "application/octet-stream"},
            {".conf", "text/plain"},
            {".cpp", "text/plain"},
            {".doc", "application/msword"},
            {".docx", "application/vnd.openxmlformats-officedocument.wordprocessingml.document"},
            {".xls", "application/vnd.ms-excel"},
            {".xlsx", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"},
            {".exe", "application/octet-stream"},
            {".gif", "image/gif"},
            {".gtar", "application/x-gtar"},
            {".gz", "application/x-gzip"},
            {".h", "text/plain"},
            {".htm", "text/html"},
            {".html", "text/html"},
            {".jar", "application/java-archive"},
            {".java", "text/plain"},
            {".jpeg", "image/jpeg"},
            {".jpg", "image/jpeg"},
            {".js", "application/x-javascript"},
            {".log", "text/plain"},
            {".m3u", "audio/x-mpegurl"},
            {".m4a", "audio/mp4a-latm"},
            {".m4b", "audio/mp4a-latm"},
            {".m4p", "audio/mp4a-latm"},
            {".m4u", "video/vnd.mpegurl"},
            {".m4v", "video/x-m4v"},
            {".mov", "video/quicktime"},
            {".mp2", "audio/x-mpeg"},
            {".mp3", "audio/x-mpeg"},
            {".mp4", "video/mp4"},
            {".mpc", "application/vnd.mpohun.certificate"},
            {".mpe", "video/mpeg"},
            {".mpeg", "video/mpeg"},
            {".mpg", "video/mpeg"},
            {".mpg4", "video/mp4"},
            {".mpga", "audio/mpeg"},
            {".msg", "application/vnd.ms-outlook"},
            {".ogg", "audio/ogg"},
            {".pdf", "application/pdf"},
            {".png", "image/png"},
            {".pps", "application/vnd.ms-powerpoint"},
            {".ppt", "application/vnd.ms-powerpoint"},
            {".pptx", "application/vnd.openxmlformats-officedocument.presentationml.presentation"},
            {".prop", "text/plain"},
            {".rc", "text/plain"},
            {".rmvb", "audio/x-pn-realaudio"},
            {".rtf", "application/rtf"},
            {".sh", "text/plain"},
            {".tar", "application/x-tar"},
            {".tgz", "application/x-compressed"},
            {".txt", "text/plain"},
            {".wav", "audio/x-wav"},
            {".wma", "audio/x-ms-wma"},
            {".wmv", "audio/x-ms-wmv"},
            {".wps", "application/vnd.ms-works"},
            {".xml", "text/plain"},
            {".z", "application/x-compress"},
            {".zip", "application/x-zip-compressed"},
            {"", "*/*"}
    };


좋은 웹페이지 즐겨찾기