与他人共享图像和文本

时间:2019-10-17 11:00:49

标签: java android

要与其他应用共享图像和文本,我做到了:

File path = getExternalFilesDir(Environment.DIRECTORY_PICTURES+"eVendeur");
              if (!path.exists()){
                  path.mkdir();
              }

              File root = getExternalFilesDir(Environment.DIRECTORY_PICTURES);
              File cachePath = new File(root.getAbsolutePath()+"/eVendeur/"+id_produit+".jpg");

    try {
        cachePath.createNewFile();
        FileOutputStream outputStream = new FileOutputStream(cachePath);
        myBitmap.compress(Bitmap.CompressFormat.JPEG, 100, outputStream);
        outputStream.close();

    } catch (IOException e) {
        e.printStackTrace();
    }

    Intent share = new Intent(Intent.ACTION_SEND);
    share.setType("*/*");
    share.putExtra(Intent.EXTRA_TEXT, "my text");

    if(Build.VERSION.SDK_INT>=24){
                        try{
                            Method m = StrictMode.class.getMethod("disableDeathOnFileUriExposure");
                            m.invoke(null);
                        }catch(Exception e){
                            e.printStackTrace();
                        }
                    }

    share.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(cachePath));
    view.getContext().startActivity(Intent.createChooser(share, "Share:"));

它可以工作,但是在某些设备上,我得到了:

java.io.IOException:没有这样的文件或目录。...

我应该在代码中进行哪些更改才能使其正常工作?

预先感谢

2 个答案:

答案 0 :(得分:0)

使用getExternalFilesDir代替getExternalStoragePublicDirectory

#include <stdio.h>

int main ()
{
  int *b;
  printf ("Enter some int value -> ");
  scanf ("%d", b);

  printf ("Entered value is: %d", *b);


  return 0;
}

有关更多详细信息,请访问Docs

答案 1 :(得分:0)

如果您得到:

FileUriExposedException: file:///storage/emulated/0/Android/data/com.e_vendeur/files/Pictures/eVendeur/-LqzYHtp3h-1qbHU6PK_.jpg通过ClipData.Item.getUri()暴露在应用程序之外

然后在调用intent之前添加它:

   if(Build.VERSION.SDK_INT>=24){
                            try{
                                Method m = StrictMode.class.getMethod("disableDeathOnFileUriExposure");
                                m.invoke(null);
                            }catch(Exception e){
                                e.printStackTrace();
                            }
                        }