使用ACTION_VIEW从android中的缓存文件夹打开图像

时间:2015-03-31 06:38:54

标签: android

这是我的代码

imgBtn.setOnClickListener(new OnClickListener(){

        @Override
        public void onClick(View v) {

            Cursor curso1 = dbUtil.getImgBlabreport(strLabReqId, strCat,
                    strTestCode);
            if (curso1.moveToFirst()) {
                curso1.moveToFirst();

                img = curso1.getBlob(curso1
                        .getColumnIndex(DbHelper.PHOTO_FIELD));


                ByteArrayInputStream imageStream = new ByteArrayInputStream(
                        img);

                bitmap = BitmapFactory.decodeStream(imageStream);
                File f1 = context.getCacheDir();

                String url = "data/data/com.rajinfotech.patientinfo/cache/";

                try {
                    File dir = new File(url);
                    if (!dir.exists()) {
                        dir.mkdirs();
                    }
                    OutputStream fOut = null;
                    File file = new File(url, "reportimg1.png");


                    if (file.exists())
                        file.delete();

                    file.createNewFile();
                    fOut = new FileOutputStream(file);
                    bitmap.compress(Bitmap.CompressFormat.PNG, 100, fOut);
                    fOut.flush();
                    fOut.close();
                    ImageView();



                } catch (Exception e) {
                    Log.e("saveToExternalStorage()", e.getMessage());
                }

                curso1.close();
            }


            else {
                Toast.makeText(context, "No image to visible",
                        Toast.LENGTH_SHORT).show();
            }

        }
    });

public void ImageView(){

    String path = "data/data/com.rajinfotech.patientinfo/cache/reportimg1.png";
    // Uri uri = Uri.parse(path);
    File targetFile = new File(path);
    Uri uri = Uri.fromFile(targetFile);

    Intent intent = new Intent(Intent.ACTION_VIEW);

    intent.addCategory(Intent.CATEGORY_DEFAULT);
    intent.setDataAndType(uri, "image/*");
    startActivity(intent);


}

在运行此代码时,我的图库以黑屏打开,但图像位于缓存文件夹中,任何人都可以帮我解决这个问题。

2 个答案:

答案 0 :(得分:1)

您可以使用文件提供程序

在manifest.xml中

<provider
    android:name="android.support.v4.content.FileProvider"
    android:authorities="be.myapplication"
    android:exported="false"
    android:grantUriPermissions="true">
    <meta-data
        android:name="android.support.FILE_PROVIDER_PATHS"
        android:resource="@xml/file_paths" />
</provider>

在res / xml中创建file_paths.xml

<paths xmlns:android="http://schemas.android.com/apk/res/android">
    <cache-path name="my_cache" path="." />
</paths>

使用

File file = new File(getCacheDir(), "test.png");

Uri uri = FileProvider.getUriForFile(context, "be.myapplication", file);

Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
intent.addCategory(Intent.CATEGORY_DEFAULT);
intent.setDataAndType(uri, "image/*");

startActivity(intent);

答案 1 :(得分:0)

因为您的程序没有

的读取权限
  

/数据/数据/....

改变路径,如

  

/ SD卡/ patientinfo /高速缓存/

将解决问题。