これは私の最初の質問でした:
Androidに組み込まれているpdfビューアアプリを使用して、アプリでpdfファイルを開くことができるようにしたいのですが、他のアプリを起動する方法がわかりません。開始アクティビティを呼び出す必要があると確信しています。開いているアプリを特定する方法と、その特定のアプリにファイルを渡す方法はわかりません。
誰にも手がかりがありますか?
私の携帯電話にあるpdfビューアは実際にHTCによって作成され、AdobeはAndroid pdfビューア(これは素晴らしい)です)をリリースしたことを知りました。ユーザーがAdobeのビューアをインストールしたことを確認し、アプリからそのアプリでファイルを開くにはどうすればよいですか?
知る限りでは、アドビは開発者が使用することを望んでいるパブリックIntents
を文書化していません。
ACTION_VIEW
Intent
を試すことができます。Uri
は、ファイル(SDカードまたはアプリローカルファイルストアのMODE_WORLD_READABLE
)を指し、MIMEタイプは"application/pdf"
。
例外をキャッチすることなく、ユーザーのデバイスに適切なアプリケーションが存在するかどうかをプログラムで判断できます。
Intent intent = new Intent(Intent.ACTION_VIEW,
Uri.parse("path-to-document"));
intent.setType("application/pdf");
PackageManager pm = getPackageManager();
List<ResolveInfo> activities = pm.queryIntentActivities(intent, 0);
if (activities.size() > 0) {
startActivity(intent);
} else {
// Do something else here. Maybe pop up a Dialog or Toast
}
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;
}
}
FileFinalpath = SdCardpath + "/" + Filepath + Filename;
File file = new File(FileFinalpath);
if (file.exists()) {
Uri filepath = Uri.fromFile(file);
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(filepath, "application/pdf");
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
try {
startActivity(intent);
} catch (Exception e) {
alert.showAlertDialog(PDF_Activity.this, "File Not Started...","File Not Started From SdCard ", false);
Log.e("error", "" + e);
}
} else {
alert.showAlertDialog(PDF_Activity.this, "File Not Found...","File Not Found From SdCard ", false);
}
これはかなり古いトピックですが、ここでは外部のPDFリーダーアプリでasset /フォルダーにあるPDFを開くためのソリューションです。カスタムコンテンツプロバイダー: https://github.com/commonsguy/cwac-provider
これを使用して、assets /またはres/raw /フォルダーから提供されるファイルを定義できます。
それを試してみてください!これまでに見つけた最良かつ最も簡単なソリューション。
AndroidにはAndroid 5.0/Lollipopの組み込みフレームワークがあり、 PDFRenderer と呼ばれます。ユーザーがAndroid 5.0を持っていると仮定できる場合、それがおそらく最良のソリューションです。
Googleの開発者向けサイトには公式の例があります。
http://developer.Android.com/samples/PdfRendererBasic/index.html
アノテーションやその他の高度な機能はサポートしていません。 Intentを使用して完全なアプリを開くか、 mupdf のようなSDKを埋め込むことに本当に戻ってください。
(免責事項:mupdfで作業することは非常にまれです。)
PDF on Androidデバイスと最終的にソリューション(サードパーティPDFライブラリ統合)
https://github.com/JoanZapata/Android-pdfview
以下にリストされている複数のライブラリもテストしましたが、これらも機能しますが、
https://github.com/jblough/Android-Pdf-Viewer-Library
&ndkフレーバーに付属するmupdf( https://code.google.com/p/mupdf/downloads/detail?name=mupdf-1.2-source.Zip&can=2&q= )および必要NDKで抽出し、アプリケーションでjarまたはJavaなどとして使用します。このライブラリの使用方法を説明する素晴らしい記事@ http://dixitpatel.com/integrating-pdf -in-Android-application /
FLAG_GRANT_READ_URI_PERMISSIONを追加
Intent intent = new Intent(Intent.ACTION_VIEW)
Uri outputFileUri = FileProvider.getUriForFile(getActivity(), BuildConfig.APPLICATION_ID + ".provider", file);
intent.setDataAndType(outputFileUri, "application/pdf");
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
Intent in = Intent.createChooser(intent, "Open File");
startActivity(in);
res-> xmlフォルダーでprovider_paths.xmlを追加し、マニフェストで以下のコードを追加する必要があります
<application>
<provider
Android:name="Android.support.v4.content.FileProvider"
Android:authorities="${applicationId}.provider"
Android:exported="false"
Android:grantUriPermissions="true"
tools:replace="Android:authorities">
<meta-data
tools:replace="Android:resource"
Android:name="Android.support.FILE_PROVIDER_PATHS"
Android:resource="@xml/provider_paths" />
</provider>
</application>