채팅에서 .pdf 파일을 받고 있는데 다운로드하고 Acrobat Reader를 사용하여 표시하려고합니다. 다음은 내 코드입니다안드로이드 다운로드 및 표시 URL :
public void showPDF(String pdf)
{
try
{
Log.i("pic", " * * * in showPdf" + pdf);
String extStorageDirectory = Environment.getExternalStorageDirectory().toString();
File folder = new File(extStorageDirectory, "pdf");
folder.mkdir();
String pdf_name = pdf.replace(".pdf", "");
pdf_name = pdf_name.replace("/fileupload/data/chat/", "");
File file = new File(folder, pdf_name + ".pdf");
try
{
file.createNewFile();
}
catch (IOException e1)
{
e1.printStackTrace();
}
Log.i("pic", " * * * ready to download");
new DownloadFile(file, Functions.getServiceProtocol() + Functions.getServiceDomain() + pdf, pdf_name).execute();
}
catch (Exception e)
{
Log.i("pic", " CATCH * * * in showPdf");
}
}
}
private class DownloadFile extends AsyncTask<String, Integer, String>
{
private String fileURL, pdfname;
private File directory;
private ProgressDialog dlg = new ProgressDialog(CameraWebview.this);
public DownloadFile(File d, String f, String n)
{
directory = d;
fileURL = f;
pdfname = n;
}
@Override
protected String doInBackground(String... sUrl)
{
try
{
Log.i("pic", " TRY * * * download file");
FileOutputStream f = new FileOutputStream(directory);
URL u = new URL(fileURL);
HttpURLConnection c = (HttpURLConnection)u.openConnection();
c.setRequestMethod("GET");
c.setDoOutput(true);
c.connect();
InputStream in = c.getInputStream();
byte[] buffer = new byte[1024];
long total = 0;
int count;
while ((count = in.read(buffer)) != -1) {
total += count;
f.write(buffer, 0, count);
}
f.flush();
f.close();
try
{
Log.i("pic", " TRY * * * calling displayPdf");
displayPdf(pdfname);
}
catch(Exception ex)
{
Log.i("pic", " CATCH * * * calling displayPdf");
}
}
catch (Exception e)
{
}
return null;
}
@Override
protected void onPreExecute()
{
super.onPreExecute();
dlg.setMessage("Downloading File ...");
dlg.show();
}
@Override
protected void onProgressUpdate(Integer... progress)
{
super.onProgressUpdate(progress);
mProgressDialog.setProgress(progress[0]);
}
@Override
protected void onPostExecute(String result)
{
super.onPostExecute(result);
if (dlg.isShowing())
dlg.dismiss();
}
}
public void displayPdf(String pdf_name)
{
try
{
Log.i("pic", " TRY * * * ready to show pdf");
File file = new File(Environment.getExternalStorageDirectory() + "/pdf/" + pdf_name + ".pdf");
PackageManager packageManager = getPackageManager();
Intent testIntent = new Intent(Intent.ACTION_VIEW);
testIntent.setType("application/pdf");
List list = packageManager.queryIntentActivities(testIntent, PackageManager.MATCH_DEFAULT_ONLY);
Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
Uri uri = Uri.fromFile(file);
intent.setDataAndType(uri, "application/pdf");
startActivity(intent);
Log.i("pic", " TRY * * * here is the pdf");
}
catch (Exception e)
{
Log.i("pic", " CATCH * * * show pdf file" + e.toString());
}
항상 "손상된 파일"이라고 말합니다. 내가 사용하고있는 URL을 확인했는데 괜찮습니다. 또한 내 애플 리케이션 아이스크림 Sandwitch입니다. 내가 도대체 뭘 잘못하고있는 겁니까 ?
나는 displayPdf에서 새 File 객체를 만드는 이유를 모르겠다. 원래 파일을 사용하지 않는 이유는 무엇입니까? – njzk2
도 디바이스의 파일을 보셨습니까? – njzk2
예, alwya 20KB 파일이 손상 되었습니까? – user200658