Я реализовал следующее, и это безболезненно работает в HTC Desire (Android 2.2).
Uri uri = Uri.parse("content://com.package.app.AssetProvider/"+"document.pdf");
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setDataAndType(uri, "application/pdf");
try
{
startActivity(intent);
}
catch (ActivityNotFoundException e)
{
Toast.makeText(this,
"You have PDF reader installed!",
Toast.LENGTH_SHORT).show();
}
И в моем поставщике контента я реализовал метод openFile:
@Override
public ParcelFileDescriptor openFile(Uri uri, String mode)
throws FileNotFoundException {
Log.d(TAG, " openFile ");
try {
AssetManager am = context.getAssets();
InputStream is = am.open(uri.getLastPathSegment());
File dir = new File("data/data/"+ PACKAGE_NAME +"/files/");
dir.mkdirs();
File file = new File("data/data/"+ PACKAGE_NAME +"/files/outFile.pdf");
file.createNewFile();
OutputStream out=new FileOutputStream(file);
byte buf[]=new byte[1024];
int len;
while((len=is.read(buf))>0)
out.write(buf,0,len);
out.close();
is.close();
parcel = ParcelFileDescriptor.open(file, ParcelFileDescriptor.MODE_READ_WRITE);
}
catch (Exception e) {
Log.e("Exception",e.toString());
}
return parcel;
}
Проблема в том, что метод openFile () не называется на Samsung Galaxy S II (Android 2.3.5), HCT Wildfire (2.2.1) и HTC Sensation (Android 2.3.4).Но метод onCreate () вызывается на каждом устройстве.
Кто-нибудь, кто может помочь, пожалуйста?