7

デバイスに PDF ファイルを表示する Android アプリケーションを作成しています。また、Adobe Reader の現在のバージョンコード (35498) を使用して、pdf ファイルを表示する必要があります。画面にファイルのリストを表示するコードがあります。ここで、各ドキュメントのオンクリックで Adob​​e リーダー (デバイスにインストールされている他の PDF リーダーではない) を呼び出す必要があります。それをどのようにコーディングするかわかりません。私はAndroidの初心者です。どんな助けでも大歓迎です。

前もって感謝します、 Navin

4

4 に答える 4

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;
    }
}
于 2011-02-25T04:13:55.230 に答える
9

Adobe を具体的に開きたいと考えていますが、Android に似た方法で一般的なインテントを開き、ユーザーが開く方法を選択できるようにすることを検討することをお勧めします。参考までに、次のコードでそれを行います。

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.
    }
}

特にAbode Readerと特定のバージョンの両方を本当に使用する必要がある場合は、次を使用してクエリを実行する必要がありますPackageManager.getPackageInfo(String, int)

于 2011-02-25T04:51:53.393 に答える
6

「オンライン モード」の場合は、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);
于 2011-10-07T07:19:07.990 に答える
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;
}
于 2013-01-04T04:44:55.983 に答える