Android pdf viewのAndroid studioでの応用問題の説明


NETが開発したのですが、最近はニュースアプリを作る必要があります。能力は限られています。HTML 5 WebAPP+android studioを使ってこの仕事を完成するしかないです。
android studioは主にWebViewで発表されたWebAppをロードして、パッケージ生産APPを作成します。
その中にはいくつかのpdf文書が表示されますので、研究して、心得を記録します。
androidはネットワークのpdfを表示します。基本的な原理は、まずpdfファイルをDownloadManagerを介して携帯電話のsdkのあるフォルダにダウンロードして、android-pdf-viewerプラグインで表示します。
android-pdf-viewプラグインはgithubに直接ダウンロードできます。アドレス:https://github.com/barteksc/AndroidPdfViewer
またはリリースされたページに直接ダウンロードします。https://github.com/barteksc/AndroidPdfViewer/releases
私がダウンロードしたのは、Android PdfViewer-2.1.0バージョンのzipパッケージです。
Android PdfViewerをダウンロードして、あなたのapプロジェクトの中で、File->New->Import Moduleを開けて、先ほど解凍したフォルダに選択します。
本人カタログはD:\Android Studio Project\Android PdfView-2.1.0\android-pdf-view
这里写图片描述 
完了後、先にERRORが提示されます。

Error:Plugin with id ‘com.github.dcendents.android-maven' not found.
解決方法:
プロジェクトGraadle Scripptsディレクトリのbulid.gradleをクリックしてください。
はい、

buildscript { 
repositories { 
jcenter() 
} 
dependencies { 
classpath ‘com.android.tools.build:gradle:2.0.0' 
} 
}
のdependenciesの下に、classipath‘comp.githb.dcendents:android-maven-gradle-plugin:1.3’を追加します。
Mark Modulesの後、新たなERRORが現れます。
Error:Plugin with id‘comp.jflog.bintray’not found.
この時もdependenciesに追加します。classipath「comp.jfrog.bintray.gradle:gradle-bintray-plugn:1.0」
再度Mark Modulesであれば、エラーはありません。
まず、Android-pdf-viewerプラグインを使うことができます。
引用権限の問題を忘れないでください。

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.DOWNLOAD_WITHOUT_NOTIFICATION"/>
<uses-permission android:name="android.permission.INSTALL_PACKAGES" />
先のコードはプロジェクト中のレポートactivity.javaです。他のactivityを受信してジャンプしながらパラメータpdfアドレスを転送し、DownloadManagerを通じてダウンロードが完了したらpdfを表示します。

package cn.cgrs.myphone;
import android.app.DownloadManager;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.SharedPreferences;
import android.database.Cursor;
import android.net.Uri;
import android.os.Environment;
import android.preference.PreferenceManager;
import android.provider.OpenableColumns;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.webkit.MimeTypeMap;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.widget.TextView;
import android.widget.Toast;
import com.github.barteksc.pdfviewer.listener.OnLoadCompleteListener;
import com.github.barteksc.pdfviewer.listener.OnPageChangeListener;
import com.github.barteksc.pdfviewer.scroll.DefaultScrollHandle;
import com.shockwave.pdfium.PdfDocument;
import java.io.File;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.List;
public class Report extends AppCompatActivity implements OnPageChangeListener, OnLoadCompleteListener {
private com.github.barteksc.pdfviewer.PDFView pdfView ;
private TextView textView;
private DownloadManager downloadManager;
private SharedPreferences prefs;
private static String DL_ID = "downloadId";
Integer pageNumber = 0;
String pdfFileName = "yyy.pdf";
Uri uri;
String AUrl;
private Boolean isDown = false;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_report);
Intent intent = getIntent(); //    Intent
AUrl = intent.getStringExtra("url"); //    String  
Log.e("  url:",AUrl);
//AUrl = "http://www.tyyq.cn/xhsapp/download/a03790b7f27243eeada01537a2ce2f77.pdf";
String[] exts = AUrl.split("/");
pdfFileName = exts[exts.length-1];
Log.e("pdf   :",pdfFileName);
String pdfName = Environment.getExternalStorageDirectory() +
"/download";
File file = new File(pdfName, pdfFileName);
pdfView = (com.github.barteksc.pdfviewer.PDFView)findViewById(R.id.pdfView);
textView = (TextView) findViewById(R.id.textView);
if(file.exists()){
Log.e("Tip:","      !");
//      ,     
uri = Uri.fromFile(file);
displayFromUri(uri);
textView.setVisibility(View.GONE);
pdfView.setVisibility(View.VISIBLE);
}
else{
isDown = true;
}
//Log.e("prefs   :",prefs.toString());
}
@Override
protected void onResume(){
super.onResume();
if(isDown)
{
try{
Log.e("Tip:","     ,    !");
DL_ID = pdfFileName;
//          
downloadManager = (DownloadManager)getSystemService(DOWNLOAD_SERVICE);
prefs = PreferenceManager.getDefaultSharedPreferences(this);
StartReport();
}
catch (Exception ex)
{
Toast.makeText(this, ex.getMessage(), Toast.LENGTH_LONG).show();
}
}
}
@Override
protected void onPause() {
// TODO Auto-generated method stub
super.onPause();
//unregisterReceiver(receiver);
try {
unregisterReceiver(receiver);
} catch (IllegalArgumentException e) {
if (e.getMessage().contains("Receiver not registered")) {
// Ignore this exception. This is exactly what is desired
} else {
// unexpected, re-throw
throw e;
}
}
}
//        
protected void StartReport() {
// TODO Auto-generated method stub
if(!prefs.contains(DL_ID) || true) { //
// String url = AUrl;
//Log.e("-----",AUrl);
//String[] exts = url.split("/");
//pdfFileName = "97b49c0822c14a01b3ebc273679bc6bf.pdf";
//exts[exts.length-1];
String url = AUrl;//"http://www.tyyq.cn/RollImage/11.pdf";
Log.e("    url:",AUrl);
//    
Uri resource = Uri.parse(encodeGB(url));
DownloadManager.Request request = new DownloadManager.Request(resource);
request.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_MOBILE | DownloadManager.Request.NETWORK_WIFI);
request.setAllowedOverRoaming(false);
//      
MimeTypeMap mimeTypeMap = MimeTypeMap.getSingleton();
String mimeString = mimeTypeMap.getMimeTypeFromExtension(MimeTypeMap.getFileExtensionFromUrl(url));
request.setMimeType(mimeString);
//       
//       
request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE);
request.setDescription("        ");
//request.setShowRunningNotification(true);
request.setVisibleInDownloadsUi(true);
//sdcard     download   
request.setDestinationInExternalPublicDir("/download/", pdfFileName);
request.setTitle("    ");
long id = downloadManager.enqueue(request);
//  id
prefs.edit().putLong(DL_ID, id).commit();
} else {
Log.e("  :","      ,    ");
//      ,    
queryDownloadStatus();
}
registerReceiver(receiver, new IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE));
}
/**
*                     url   。
* @param string
* @return
*/
public String encodeGB(String string)
{
//      
String split[] = string.split("/");
for (int i = 1; i < split.length; i++) {
try {
split[i] = URLEncoder.encode(split[i], "GB2312");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
split[0] = split[0]+"/"+split[i];
}
split[0] = split[0].replaceAll("\\+", "%20");//    
return split[0];
}
private BroadcastReceiver receiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
//         id,                。            
Log.v("intent", ""+intent.getLongExtra(DownloadManager.EXTRA_DOWNLOAD_ID, 0));
queryDownloadStatus();
}
};
private void queryDownloadStatus() {
DownloadManager.Query query = new DownloadManager.Query();
query.setFilterById(prefs.getLong(DL_ID, 0));
Cursor c = downloadManager.query(query);
if(c.moveToFirst()) {
int status = c.getInt(c.getColumnIndex(DownloadManager.COLUMN_STATUS));
switch(status) {
case DownloadManager.STATUS_PAUSED:
Log.v("down", "STATUS_PAUSED");
case DownloadManager.STATUS_PENDING:
Log.v("down", "STATUS_PENDING");
case DownloadManager.STATUS_RUNNING:
//    ,      
Log.v("down", "STATUS_RUNNING");
break;
case DownloadManager.STATUS_SUCCESSFUL:
//  
Log.v("down", "    ");
String pdfName = Environment.getExternalStorageDirectory() +
"/download";
File file = new File(pdfName, pdfFileName);
uri = Uri.fromFile(file);
Log.e("----",uri.toString());
displayFromUri(uri);
textView.setVisibility(View.GONE);
pdfView.setVisibility(View.VISIBLE);
break;
case DownloadManager.STATUS_FAILED:
//        ,    
Log.v("down", "STATUS_FAILED");
downloadManager.remove(prefs.getLong(DL_ID, 0));
prefs.edit().clear().commit();
break;
}
}
}
/*pdf      */
private void displayFromUri(Uri urii) {
//pdfFileName = getFileName(urii);
pdfView.fromUri(urii)
.defaultPage(pageNumber)
.onPageChange(this)
.enableAnnotationRendering(true)
.onLoad(this)
.scrollHandle(new DefaultScrollHandle(this))
.load();
}
public void onResult(int resultCode, Intent intent) {
if (resultCode == RESULT_OK) {
uri = intent.getData();
displayFromUri(uri);
}
}
@Override
public void onPageChanged(int page, int pageCount) {
pageNumber = page;
setTitle(String.format("%s %s / %s", pdfFileName, page + 1, pageCount));
}
public String getFileName(Uri uri) {
String result = null;
if (uri.getScheme().equals("content")) {
Cursor cursor = getContentResolver().query(uri, null, null, null, null);
try {
if (cursor != null && cursor.moveToFirst()) {
result = cursor.getString(cursor.getColumnIndex(OpenableColumns.DISPLAY_NAME));
}
} finally {
if (cursor != null) {
cursor.close();
}
}
}
if (result == null) {
result = uri.getLastPathSegment();
}
return result;
}
@Override
public void loadComplete(int nbPages) {
PdfDocument.Meta meta = pdfView.getDocumentMeta();
printBookmarksTree(pdfView.getTableOfContents(), "-");
}
public void printBookmarksTree(List<PdfDocument.Bookmark> tree, String sep) {
for (PdfDocument.Bookmark b : tree) {
// Log.e(TAG, String.format("%s %s, p %d", sep, b.getTitle(), b.getPageIdx()));
if (b.hasChildren()) {
printBookmarksTree(b.getChildren(), sep + "-");
}
}
}
}
以上は小编で绍介したAndroid pdf viewのAndroid studioアプリケーションの问题を详しく说明していますので、皆さんの助けになりたいです。もし何かご质问がありましたら、メッセージをください。小编はすぐに皆さんに返事します。ここでも私たちのサイトを応援してくれてありがとうございます。