0

我正在构建一个需要读取加密 pdf 的应用程序。我将 pdf 解密 100kB 块。起初 100kB 将被解密。此块必须由手机内置的另一个 pdf 阅读器应用程序读取。

读取这 100 kB 后,将解密另外 100 kB 数据。此块将由 pdf 阅读器应用程序读取。之前的 100 KB 数据副本将被加密。我能做些什么来实现这个目标?

目前,我有以下代码,其中无法通过 100 kb 块读取另一个应用程序的 pdf。

Uri path_sultan = Uri.fromFile(file); 
        Intent intent = new Intent(Intent.ACTION_VIEW); 
        intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
        String ext =GetFileExtension(file.getAbsolutePath());

        if(ext.equalsIgnoreCase("pdf")  )
            ext = "application/" +ext.toLowerCase() ;
        else if( ext.equalsIgnoreCase("epub") )
            ext = "application/" +ext.toLowerCase();
        intent.setDataAndType(path_sultan,ext); 

        try 
        { 
            startActivity(intent); 
        }  
        catch (ActivityNotFoundException e) 
        { 
           // Toast.makeText(this,"No Application Available to View PDF",Toast.LENGTH_SHORT).show(); 
        }       
    }

伙计们,你能在这方面帮助我吗?我非常需要你的建议。

4

1 回答 1

0

我能做些什么来实现这个目标?

很有可能从头开始编写您自己的 PDF 渲染器。PDF 查看器需要访问整个流,按照他们的选择进行读取,而不是基于任意的“100 kB”分割线。

如果您愿意对“100 kB”部分进行微调,并根据查看者的需要简单地动态解密数据,您可以使用 a ContentProvideropenFile()使用管道实现ParcelFileDescriptor,以允许查看器从您写入的流中读取,您正在写入解密数据。

这是一个演示此技术的示例应用程序,减去实际解密。这是同一示例的另一个版本Uri,通过在我启动它们的活动时授予权限,进一步限制对我指定的应用程序的访问。

于 2013-03-05T13:49:57.490 回答