【问题标题】:Loading PDF from internal storage Error invalid format从内部存储加载 PDF 错误格式无效
【发布时间】:2016-11-25 10:24:55
【问题描述】:

所以我一直在练习下载管理器,并且正在尝试一些程序。 第一个按钮会将上述 Pdf 下载到我手机中的某个位置。 第二个按钮应该使用用户安装的 Pdf 阅读器(例如 WP Reader 等)打开 Pdf 文件。 下载工作正常,但是当我打开 pdf 时,它说格式无效。 我上传了一个示例 Pdf 到谷歌驱动器,所以我知道上传的文件在任何情况下都没有损坏。从服务器下载文件时可能会出现一些问题。请帮我找出错误。而且我对 Android 比较陌生。

下载按钮使用 Onclicklistener,而 loadPdf 在 xml 文件 android:onClick="downloadPdf" 中给出。

    public class MainActivity extends AppCompatActivity {

String myHTTPUrl = "https://drive.google.com/open?id=0B5Pev9zz5bVjZTFFZ1dLZVp1WVU";
String TAG = "My app";

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    Button download = (Button) findViewById(R.id.download);


    download.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            Log.v(TAG,"download method called");
            downloadPdf();

            Toast.makeText(MainActivity.this,"Listener Called",Toast.LENGTH_SHORT).show();
            Log.v(TAG,"On Click Listener Called");

        }
    });

}


public void loadPdf(View view) {

    Log.v(TAG,"Pdf load called");

    File pdfFile = new File(Environment.getExternalStorageDirectory()+"/notes","ssp.pdf");
    if(pdfFile.exists())
    {
        Uri path = Uri.fromFile(pdfFile);
        Intent pdfIntent = new Intent(Intent.ACTION_VIEW);
        pdfIntent.setDataAndType(path, "application/pdf");
        pdfIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

        Intent intent = Intent.createChooser(pdfIntent, "Open File");
        try
        {
            startActivity(intent);
        }
        catch(ActivityNotFoundException e)
        {
            Toast.makeText(MainActivity.this, "No Application available to view pdf", Toast.LENGTH_LONG).show();
        }
    }
    else
    {
        Toast.makeText(MainActivity.this,"Pdf not found",Toast.LENGTH_SHORT).show();
    }


}

public void downloadPdf()
{
    DownloadManager manager = (DownloadManager) getSystemService(Context.DOWNLOAD_SERVICE);
    DownloadManager.Request request = new DownloadManager.Request(Uri.parse(myHTTPUrl));
    request.setTitle("Solid State Physics");
    request.setDescription("File is being Downloaded...");
    request.allowScanningByMediaScanner();
    request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
    request.setDestinationInExternalPublicDir("/notes","ssp.pdf");
    manager.enqueue(request);

}}

编辑: 这是我在截图时遇到的确切错误 错误:文件格式错误,无法打开 Screenshot of the error.

【问题讨论】:

    标签: java android pdf internal android-download-manager


    【解决方案1】:

    您不是在下载 PDF,而是在下载显示 PDF 内容的网页。如果您想直接下载 PDF 文件,请使用以下 URL:

    String myHTTPUrl = "https://drive.google.com/uc?export=download&id=0B5Pev9zz5bVjZTFFZ1dLZVp1WVU";
    

    你的应用程序应该可以工作了。

    (不要忘记先删除无效的notes/ssp.pdf文件,否则DownloadManager会以不同的名称下载文件,例如notes/ssp-1.pdf。)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-04-29
      • 2019-08-17
      • 2015-10-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-30
      • 2023-02-05
      相关资源
      最近更新 更多