2017-10-21 22 views
0

나는 당신의 도움을 주셔서 감사합니다,이 내가 사용하고있는 코드입니다 :Android Nougat의 인 텐트를 사용하여 PDF 파일을 열려면 어떻게해야합니까? 내 코드는 의도가있는 PDF 파일을 열 수 있도록

String pathFile = 
    Environment.getExternalStorageDirectory().toString() + 
    FileUtils.PATH_SEPARATOR + "myFolder" + 
    FileUtils.PATH_SEPARATOR + "myFile.pdf"; 
File pdfFile = new File(pathFile); 
if (pdfFile.exists()) { 
    Uri uri = Uri.fromFile(new File(pathFile)); 
    Intent intent = new Intent(Intent.ACTION_VIEW); 
    intent.setDataAndType(uri, "application/pdf"); 
    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
    startActivity(intent); 
} 

하지만 이해 이제 (안드로이드-N 버전에서) 권한을 다르게 처리되므로 인 텐트를 사용하여 PDF 파일을 열려면 어떤 변경을해야하는지 알려 주시면 도와 드리겠습니다.

PS : 내의 AndroidManifest.xml에서 나는 STORAGE의 모든 권한을 찾고 :

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> 
+0

외부 저장소를 읽을 수 있도록 허가를 받았습니까? – Karthik

+0

내 AndroidManifest.xml에 대한 액세스 권한 요청이 있습니다. – Pepo

+0

런타임 권한을 선언 했습니까? nogout 앞으로는 런타임 권한을 선언해야하기 때문입니다. – Karthik

답변

0

이 코드를 사용해보십시오.

Intent intent = new Intent(Intent.ACTION_VIEW); 
try { 
    String newFilePath = filePath.replaceAll("%20", " "); 
    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.N) { 
     intent.setDataAndType(Uri.parse(newFilePath), "application/pdf"); 
    } else { 
     Uri uri = Uri.parse(newFilePath); 
     File file = new File(uri.getPath()); 
     if (file.exists()){ 
      uri = FileProvider.getUriForFile(context, context.getPackageName() + ".provider", file); 
      intent.setDataAndType(uri, "application/pdf"); 
      intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); 
     } 
    } 

    intent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY); 
    startActivity(intent);