一部の機密データを保護するための要件があります。データはURLからPDFとしてダウンロードし、次のコードを使用したアプリケーション専用ファイルとして保存されます。コンテンツプロバイダURIからのインテントを表示しますか?
今public File downloadPDF(final Context fileContext, Uri reportUri, final String fileName)
{
try
{
HttpGet get = new HttpGet(reportUri.toString());
File file = httpClient.execute(get, new ResponseHandler<File>()
{
@Override
public File handleResponse(HttpResponse response) throws ClientProtocolException, IOException
{
if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK)
{
response.getEntity().writeTo(fileContext.openFileOutput(fileName, Context.MODE_WORLD_READABLE));
return fileContext.getFileStreamPath(fileName);
}
return null;
}
});
return file;
}
catch (IOException e)
{
Log.e(TAG, "Unable to download report.", e);
}
return null;
}
、私は何をしたいのですがContext.MODE_PRIVATEを使用してこれを変更してのContentProviderを作成することです私のアプリケーションでは、このファイルをAdobe ReaderなどのPDFリーダーと共有することを完全に制御できます。これは可能ですか?現在、次のようなコードを使用して、現在設定されているPDFリーダーにレポートURIを渡します。
// Fire up a PDF viewer intent for the URL.
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setDataAndType(uri, "application/pdf");
startActivity(intent);
ContentProviderタイプのURIでも同じことができますか? content:// package/fileidタイプのURI?私は明日少しでもスパイクを試みて、できるかどうか見ていきますが、誰かがfile:// URIだけが許されていることを知っていれば、本当に役に立ちます。
UPDATE
私はオーバーライドされ、以下の方法でContentProviderのサブクラスを実装することで、十分に私の問題を解決することができました:
@Override
public ParcelFileDescriptor openFile(Uri uri, String mode) throws FileNotFoundException
{
// The filename is the path in the URI without the initial slash.
String fileName = uri.getPath().substring(1);
File file = getContext().getFileStreamPath(fileName);
return ParcelFileDescriptor.open(file, ParcelFileDescriptor.MODE_READ_ONLY);
}
その後、私は見意図をオフに解雇する場合、それは次のように書き直されます:
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
Uri uri = Uri.withAppendedPath(Uri.parse("content://providername/"),filePath);
intent.setData(uri);
startActivity(intent);
私の場合は、content://
URIからの読み込みを適切に実装しているAdobe Readerを使用しています。
ありがとうございます。私は自分の午前中にコンセプトの実証に取り組み、私がよく使うPDFリーダーが 'content://' URIを受け入れるかどうかを調べるつもりです。私はこの 'PackageManager'の使い方について知らなかったので、私はそれについて読むことができます。 – Thorinside
はい、それは起こっているようです。私はAdobe Readerの 'ソース'を見て、VIEW content:// Intentの場合にコンテンツリゾルバを使用するかどうかを確認し、実際にはそうなるように見えます。私は今なぜ私のContentProviderが呼び出されていないのか把握しようとしています。 – Thorinside
さて、私は、Adobe Readerの入力ストリーム要求を代行受信するために、ContentProviderインスタンスのopenFileメソッドをオーバーライドする必要があることを知りました。私は励まされる。 – Thorinside