2011-02-25 9 views
8

나는 장치에 PDF 파일을 표시하기 위해 안드로이드 응용 프로그램을 쓰고 있습니다. pdf 파일을 표시하려면 Adobe Reader의 현재 버전 코드 (35498)를 사용해야합니다. 화면에 파일 목록을 표시하는 코드가 있습니다. 이제 각 문서의 onclick 어도비 리더 (장치에 설치된 다른 PDF 리더가 아닌)를 호출해야합니다. 내가 어떻게 코딩하는지 모르겠다. 나는 안드로이드 초보자입니다. 어떤 도움이라도 대단히 감사하겠습니다. 사전에내 안드로이드 응용 프로그램 내에서 Adobe Reader를 호출

감사합니다, 나빈

+3

Adobe Reader가 필요한 이유가 무엇입니까? Android의 의도 시스템의 요점은 사용자가 선택한 (그리고 사용 가능한) PDF 용으로 앱을 사용하는 것입니다. – EboMike

+0

@EboMike - 어도비 리더가 겉 모습과 느낌면에서 본 안드로이드 PDF 뷰어 중에서 최고입니다. 그리고 현재 버전에있는 또 다른 중요한 이유는 복사/붙여 넣기/인쇄 기능을 허용하지 않기 때문에 사용자가 문서의 내용을 복사하기를 원하지 않습니다. 문서를 안전하게 보관할 수있는 다른 방법이 있습니까? 내가 말했듯이 나는 안드로이드에서 초보자이고 내가 말하는 것에 틀림이 있을지 모른다. – NavinC

+1

상관 없어요. "최고의"독자가 자신의 필요에 부합한다고 생각하는 것을 결정하는 것은 사용자의 몫입니다. 게다가 사용자가 특정 리더를 설치하지 않은 경우 사용자의 접근 방식이 실패합니다. – EboMike

답변

10

private void loadDocInReader(String doc) 
    throws ActivityNotFoundException, Exception { 

    try { 
       Intent intent = new Intent(); 

       intent.setPackage("com.adobe.reader"); 
       intent.setDataAndType(Uri.parse(doc), "application/pdf"); 

       startActivity(intent); 

    } catch (ActivityNotFoundException activityNotFoundException) { 
       activityNotFoundException.printStackTrace(); 

       throw activityNotFoundException; 
    } catch (Exception otherException) { 
       otherException.printStackTrace(); 

       throw otherException; 
    } 
} 
+1

분명히 실생활에서는 catch() 블록을 "독자가 설치되어 있지 않다"는 Dialog로 대체하려고합니다. 그 외 좋은. +1. – EboMike

+0

@EboMike : 실제로 코드는 다음과 같아야합니다. – Mudassir

+0

코드 완료;) – Greenhorn

10

내가 특별히 어도비을 열고 자하는 것을 볼 다음 코드를 시도,하지만 당신은 그것을의 더 많은 안드로이드와 같은 방식으로 일을하는 것이 좋습니다 일반 의도를 열고 사용자가 열리는 방법을 선택할 수 있도록합니다. 참고로, 다음과 같은 코드로 그렇게 할 것 : 당신이 정말로 특별히 모두 거처 Reader를 사용해야하고, 특정 버전, 당신은 그것을 PackageManager.getPackageInfo(String, int)

6

를 사용하여 쿼리 할 필요가있는 경우

private void openFile(File f, String mimeType) 
{ 
    Intent viewIntent = new Intent(); 
    viewIntent.setAction(Intent.ACTION_VIEW); 
    viewIntent.setDataAndType(Uri.fromFile(file), mimeType); 
    // using the packagemanager to query is faster than trying startActivity 
    // and catching the activity not found exception, which causes a stack unwind. 
    List<ResolveInfo> resolved = getPackageManager().queryIntentActivities(viewIntent, 0); 
    if(resolved != null && resolved.size() > 0) 
    { 
     startActivity(viewIntent); 
    } 
    else 
    { 
     // notify the user they can't open it. 
    } 
} 

"온라인 모드"에있는 경우 Google 문서를 사용하는 흥미로운 대체 솔루션이 있습니다.

String myPDFURL = "http://{link of your pdf file}"; 

String link; 
try { 
    link = "http://docs.google.com/viewer?url=" 
    + URLEncoder.encode(myPDFURL, "UTF-8") 
    + "&embedded=true"; 
} catch (Exception e) { 
    e.printStackTrace(); 
} 

Uri uri = Uri.parse(link); 
Intent intent = new Intent(Intent.ACTION_VIEW, uri); 
startActivity(intent); 
+0

ftp 링크에서도 작동합니까? –

2

URL을 통해 사용되는 경우 setDataAndType 메서드가 PDF 유형을 올바르게 인식하지 못하는 것 같습니다. 당신은 결국 호출 될 겁니다 있도록

private static Intent newPDFLinkIntent(String url) { 
    Uri pdfURL = Uri.parse(url); 
    Intent pdfDownloadIntent = new Intent(Intent.ACTION_VIEW, pdfURL); 
    pdfDownloadIntent.setType("application/pdf"); 
    pdfDownloadIntent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); 
    return pdfDownloadIntent ; 
} 

불행히도, 온라인 콘텐츠를 다운로드 및 캐싱을 예상하지 않는 사용하고있어 PDF 응용 프로그램 (일부, 일부는 링크 다운로드를 거부합니다 메모리 누수 오류가있을 것이다) 알림 링크를 통해 다운로드 한 콘텐츠를 열기 전에 먼저 PDF를 다운로드하는 인 텐트 결국 아래의 솔루션을 사용했습니다 :

private static Intent newPDFLinkIntent(String url) { 
    Intent pdfDownloadIntent = null; 
    try { 
     pdfDownloadIntent = Intent.parseUri(url, Intent.URI_INTENT_SCHEME); 
     pdfDownloadIntent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); 
    } catch (URISyntaxException e) { 
     Log.e("PDF Link Tag", e.getMessage()); 
    } 
    return pdfDownloadIntent; 
}