Bazı hassas verileri korumak için bazı gereksinimlerim var. verileri bir URL'den PDF olarak indirilen ve aşağıdaki kodu kullanarak bir Uygulama Özel dosya olarak kaydedilir: Artıkİçerik Sağlayıcı URI'sinin amacı nedir?
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;
}
, ne yapmak istiyorum Context.MODE_PRIVATE kullanarak bu değiştirmek ve ContentProvider oluşturmaktır Uygulamamın bu dosyanın Adobe Reader gibi bir PDF okuyucuya paylaşılması üzerinde tam kontrol sahibi olması. Mümkün mü? Şu anda rapor URI'sını şu anda yapılandırılmış PDF okuyucuya geçirmek için aşağıdaki gibi kod kullanıyorum.
// 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);
misiniz aynı bir ContentProvider türü URI aracılığıyla çalışacak mı? Bir içerik: // paket/dosya türü URI? Gelip yapamayacağımı görmek için biraz yarın başlayacağım, ama eğer herkesin sadece dosya: // URI'lere izin verildiğini biliyorsanız, bu gerçekten yardımcı olacaktır. ,
@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);
}
Sonra ben inceleyen niyet ateşlemesi:
GÜNCELLEME
Ben geçersiz aşağıdaki yöntemi ile bir ContentProvider alt sınıfı uygulayarak biçimde sorunu çözmek başardı Aşağıdaki gibi bir şey yeniden yazılır:
Ve benim durumumda, content://
URI'leri yüklemeyi düzgün bir şekilde uygulayan Adobe Reader kullanıyorum.
Çok teşekkürler. Sabahları, genellikle kullandığım PDF okuyucuları tarafından 'content: // URI'ların kabul edilip edilmediğini görmek için bir konsept kanıtı üzerinde çalışmayı planlıyorum. 'PackageManager'ın bu kullanımını bilmiyordum, bu yüzden bu konu hakkında bir şeyler okuyacağım. – Thorinside
Evet, öyle görünüyor.Adobe Reader için 'Source' kaynağında, bir “VIEW content: // Intent” olması durumunda bir İçerik Çözümleyici kullanıp kullanamayacağına baktım ve aslında öyle görünüyor. Şimdi ContentProvider'ın neden geri çağrılmadığını anlamaya çalışıyorum. – Thorinside
Tamam, Adobe Reader'ın giriş akışı isteğini engellemek için ContentProvider örneğindeki openFile yöntemini geçersiz kılmam gerektiğini anladım. Ben teşvik edildim. – Thorinside