0

我有一个 Android 应用程序,我在其中截获 WebView 中的 PDF 文件下载事件,使用 DownloadManager 下载它,然后使用 Adob​​e Reader 启动一个新意图以显示该文件。它工作正常,除了当 Adob​​e Reader 启动时,它会在显示实际文件之前显示以下消息:

只读文件 | 要修改此文档,请在您的设备上保存一份副本。保存 | 查看只读

在我关闭此提示后,文档将正确显示。如何摆脱只读提示?

这是我的代码:

public class MyDownloadListener implements DownloadListener {

    MainActivity activity;
    BroadcastReceiver receiver;
    DownloadManager downloadManager;

    public MyDownloadListener(MainActivity a) {
        activity = a;
        downloadManager = (DownloadManager) activity.getSystemService(Context.DOWNLOAD_SERVICE);
        receiver = new BroadcastReceiver() {
            @Override
            public void onReceive(Context context, Intent intent) {
                String action = intent.getAction();
                if (DownloadManager.ACTION_DOWNLOAD_COMPLETE.equals(action)) {
                    long downloadId = intent.getLongExtra(DownloadManager.EXTRA_DOWNLOAD_ID, 0);
                    Query query = new Query();
                    query.setFilterById(downloadId);
                    Cursor c = downloadManager.query(query);
                    if (c.moveToFirst()) {
                        int columnIndex = c.getColumnIndex(DownloadManager.COLUMN_STATUS);
                        if (DownloadManager.STATUS_SUCCESSFUL == c.getInt(columnIndex)) {
                            String uriString = c.getString(c.getColumnIndex(DownloadManager.COLUMN_LOCAL_FILENAME));
                            File fileSrc = new File(uriString);
                            Intent intentPdf = new Intent(Intent.ACTION_VIEW);
                            intentPdf.setDataAndType(Uri.fromFile(fileSrc), "application/pdf");
                            intentPdf.setPackage("com.adobe.reader");
                            intentPdf.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                            activity.startActivity(intentPdf);
                        }
                    }
                }
            }
        };
        activity.registerReceiver(receiver, new IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE));
    }

    @Override
    public void onDownloadStart(String url, String userAgent, String contentDisposition, String mimetype, long contentLength) {
        Request request = new Request(Uri.parse(url));
        downloadManager.enqueue(request);
    }
}
4

1 回答 1

0

根据类的官方文档DownloadManager.Request

此类包含请求新下载所需的所有信息。URI 是唯一必需的参数。请注意,默认下载目标是共享卷,如果需要回收空间供系统使用,系统可能会在其中删除您的文件。如果这是一个问题,请使用外部存储上的位置(请参阅 setDestinationUri(Uri)

因此,默认位置更多的是缓存位置,如果需要更多空间,系统可以删除文件。因此,如果您想保留文件,则可以使用setDestinationUri提供 SD 卡中的路径..

并且看起来默认空间不允许下载管理器以外的任何其他线程/进程在该空间中写入文件,因此来自 adobe reader 的只读消息..

于 2013-04-12T08:26:33.240 回答