有人可以确认adobe reader与自定义内容提供商合作

时间:2012-02-05 12:10:20

标签: android android-contentprovider adobe-reader

我已经实现了一个自定义内容提供程序,将pdf文档作为ParcelFileDescriptor提供。文件存储在标记为PRIVATE的本地存储中。根据URI,文档将被移交给选定的pdf应用程序。

这适用于除adobe reader之外的所有PDF Viewer应用程序。有人可以确认adobe reader不能与内容提供商合作吗?代码如下:

下载文件后:

private void loadDocInReader(String doc) throws ActivityNotFoundException, Exception 
{
    Uri uri = Uri.parse(doc);   

    logger.debug("PDF Application ID is: " + pdfAppID);

    if (this.pdfAppID != null && this.pdfAppID.length() > 0) 
    {
        boolean pdfApplicationIsInstalled = checkPDFApplicationIsInstalled(this.pdfAppID);

        if(pdfApplicationIsInstalled) {
            Intent intent = new Intent();
            intent.setPackage(pdfAppID);
            intent.setData(uri);
            intent.setType("application/pdf");
            startActivity(intent);
        }
        else {
            logger.error("Please install Adobe Reader first!");
        }
    }
    else {
        Intent intent = new Intent();
        intent.setData(uri);
        intent.setType("application/pdf");
        startActivity(intent);
    }
}

除adobe reader之外,所有其他pdf查看器应用程序都会调用此方法:

public class DocumentProvider extends ContentProvider 
{
@Override
public ParcelFileDescriptor openFile(Uri uri, String mode) throws FileNotFoundException 
{
    File file = null;

    try {

        file = new File(uri.getPath());
        logger.debug("Delivering ParcelFileDescriptor for path: " + file.getPath());
        return ParcelFileDescriptor.open(file,   ParcelFileDescriptor.MODE_READ_ONLY);

    } catch (FileNotFoundException e) {
        logger.error("Error loading Document: ",e);
    } finally {
        if(file.exists()) {
        file.delete();
        }
    }
    return null;
}

@Override
public int delete(Uri uri, String selection, String[] selectionArgs) {
    return 0;
}
}

Adob​​e Reader始终声明:“文件路径无效”

提前致谢!!!凯。

2 个答案:

答案 0 :(得分:1)

据我所知,Adobe Reader对于从ContentProviders读取文件有不稳定的支持。在我的例子中,调用openFile方法并返回一个有效的ParcelFileDescriptor,但Adobe Reader报告“无法打开文档”。我的内容提供商可以使用“Drive PDF Viewer”,“PDF Reader”和“qPDF Reader”,这些都是Play商店中的顶级PDF查看器。

Adob​​e Reader可以使用Gmail内容提供商在Gmail中打开PDF文件附件,但我无法确定其工作原理或原因。

答案 1 :(得分:0)

我也遇到了Adobe Acrobat Reader的问题,因为我没有使用我的自定义提供程序,最终让它运行起来。我的问题是app-local文件空间中的文件是加密的,并且它们的名称是经过哈希处理的。所以Uri就像是:

content://my.app.provider/08deae8d9ea9bc0b84f94475d868351830e9f7e7

它适用于我测试的任何PDF查看器应用程序,除了Adobe Reader。今天我最后一次尝试向Content Uri添加.pdf扩展程序(这绝对不是必需的),当Adobe调用openFile()函数时,我删除了扩展程序。 VOILA,它有效!!!

<强>更新

由于_display_name查询还包含ContentProvider 扩展程序!!!

请确保您的query(Uri, String[], String, String[], String)列也返回.pdf列。

注意

使用 Adob​​e Acrobat Reader 版本进行测试 16.3