Click here to Skip to main content
15,890,717 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
See more:
File file = new File( getIntent().getData().getPath());

Intent i = new Intent(Intent.ACTION_SEND);
if(Build.VERSION.SDK_INT>=Build.VERSION_CODES.N) {
    Uri myuri = FileProvider.getUriForFile(this, "com.example.xyz", file);
    i.putExtra(Intent.EXTRA_STREAM,myuri);
}else
{
    i.putExtra(Intent.EXTRA_STREAM,Uri.fromFile(new File(file.getPath())));

}
i.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
i.setType("application/pdf");
startActivity(new Intent(Intent.createChooser(i, "share via")));

return (true);


What I have tried:

I am trying to share the file using getIntent(). The file is opening using getIntent() but won't able it to share.Exception is giving java.illegalArgumentException . While giving actual path its working
File file = new File( "some file path");
Posted
Updated 22-Jul-20 1:01am
v2

1 solution

A similar query asked few yeas back at SO, snippet from there:
The string that you get from intent actually is the URI for the file. You can use this method to get the actual path:
Java
public static String getActualPath(final Context context, final Uri uri) {

    final boolean isKitKat = Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT;

    // DocumentProvider
    if (isKitKat && DocumentsContract.isDocumentUri(context, uri)) {
        // ExternalStorageProvider
        if (isExternalStorageDocument(uri)) {
            final String docId = DocumentsContract.getDocumentId(uri);
            final String[] split = docId.split(":");
            final String type = split[0];

            if ("primary".equalsIgnoreCase(type)) {
                return Environment.getExternalStorageDirectory() + "/" + split[1];
            }

            // TODO handle non-primary volumes
        }
        // DownloadsProvider
        else if (isDownloadsDocument(uri)) {

            final String id = DocumentsContract.getDocumentId(uri);
            final Uri contentUri = ContentUris.withAppendedId(
                    Uri.parse("content://downloads/public_downloads"), Long.valueOf(id));

            return getDataColumn(context, contentUri, null, null);
        }
        // MediaProvider
        else if (isMediaDocument(uri)) {
            final String docId = DocumentsContract.getDocumentId(uri);
            final String[] split = docId.split(":");
            final String type = split[0];

            Uri contentUri = null;
            if ("image".equals(type)) {
                contentUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
            } else if ("video".equals(type)) {
                contentUri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI;
            } else if ("audio".equals(type)) {
                contentUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
            }

            final String selection = "_id=?";
            final String[] selectionArgs = new String[] {
                    split[1]
            };

            return getDataColumn(context, contentUri, selection, selectionArgs);
        }
    }
    // MediaStore (and general)
    else if ("content".equalsIgnoreCase(uri.getScheme())) {
        return getDataColumn(context, uri, null, null);
    }
    // File
    else if ("file".equalsIgnoreCase(uri.getScheme())) {
        return uri.getPath();
    }

    return null;
}

Modify and use as per your need.
 
Share this answer
 

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900