0

暗号化された pdf を読み取る必要があるアプリケーションを構築しています。100kB ブロックごとに pdf を復号化します。最初に 100kB が復号化されます。このブロックは、 phone に組み込まれている別の PDF リーダー アプリケーションによって読み取られる必要があります。

この 100 kB を読み取った後、別の 100 kB のデータが復号化されます。このブロックは、pdf リーダー アプリケーションによって読み取られます。100 KB のデータの以前のコピーは暗号化されます。この目標を達成するために何ができますか?

現在、別のアプリケーションで 100 kb block で 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」の部分を巧みに処理し、ビューアの必要に応じてオンザフライでデータを単純に復号化する場合は、そのContentProviderために を使用できます。openFile()パイプを使用して を実装ParcelFileDescriptorし、ビューアが、復号化されたデータを書き込むストリームから読み取れるようにします。

これは、実際の復号化を除いた、この手法を示すサンプル アプリケーションです。同じサンプルの別のバージョンを次に示しUriます。これは、アプリのアクティビティを開始するときにアクセス許可を付与することで、指定したアプリのみへのアクセスをさらに制限します。

于 2013-03-05T13:49:57.490 に答える