Контент-провайдер работает не полностью на каждом устройстве - PullRequest
3 голосов
/ 09 января 2012

Я реализовал следующее, и это безболезненно работает в 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 () вызывается на каждом устройстве.

Кто-нибудь, кто может помочь, пожалуйста?

...