Android - String in Base64 decode to pdf

0

Hello,

The purpose is to decode a string in Base64 and move to PDF format and open ( no need to download to android device ).

At this point I have this:

public void onClick(View view) {
        int position = getAdapterPosition();
        //Toast.makeText(ctx, "Sapo" + position + base64Strisng, Toast.LENGTH_SHORT).show();
        Log.e("Test", base64String.toString());
        try {


            //Não sei como fazer o decode da string e passar para o itent

            Intent intent = new Intent(Intent.ACTION_VIEW);
            intent.setDataAndType(Uri.fromFile(f), "application/pdf");
            intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
            ctx.startActivity(intent);

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

Update 1

@Override
    public void onClick(View view) {
        int position = getAdapterPosition();
        //Toast.makeText(ctx, "Sapo" + position + base64Strisng, Toast.LENGTH_SHORT).show();
        Log.e("Test", base64String.toString());

        byte[] pdfStream = Base64.decode(base64String, 0);
        InputStream inputStream = new ByteArrayInputStream(pdfStream);
        File file ;
        try {

            file = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS), "sapo.pdf");
            Logger.getLogger("createFile: "+file.getAbsolutePath());
            OutputStream outputStream = new FileOutputStream(file);
            IOUtils.copy(inputStream, outputStream);
            outputStream.close();


            Intent intent = new Intent(Intent.ACTION_VIEW);
            intent.setDataAndType(Uri.fromFile(file), "application/pdf");
            intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
            ctx.startActivity(intent);

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

Update 3

Problem solved, I was doing decode wrongly

What I had (wrong):

  

byte [] pdfStream = base64String.getBytes (StandardCharsets.UTF_8);

What I changed (right)

  

byte [] pdfStream = Base64.decode (base64String, 0);

    
asked by anonymous 17.01.2018 / 14:24

1 answer

0

If your goal is to use the file only as temporary, you can use the createTempFile function, as shown in the example below:

public File getTempFile(Context context, String url) {
File file;
try {
    String fileName = Uri.parse(url).getLastPathSegment();
    file = File.createTempFile(fileName, null, context.getCacheDir());
} catch (IOException e) {
    // Error while creating file
}
    return file;
}

On android developers has more examples

    
17.01.2018 / 14:44