通过Android中的Firebase提取PDF文件

时间:2019-04-26 08:47:27

标签: android firebase

我已经开发了一个墙纸应用程序,该应用程序可以从Firebase获取图像并在android应用程序中显示,现在我想在该应用程序中进行更改,以便可以从Firebase获取pdf格式的文档

我尝试将setType从“ image /”更改为“ application /”,我可以提取文件,但既不能下载也不可以共享

@Override
public WallpaperViewHolder onCreateViewHolder(ViewGroup parent,int viewType) {
    View view= LayoutInflater.from(mCtx).inflate(R.layout.recyclerview_wallpapers,parent,false);
    return new WallpaperViewHolder(view);
}

    public void onBindViewHolder(@NonNull WallpaperViewHolder categoryViewHolder, int position) {
        wallpaper w;
        w = wallpaperList.get(position);
        categoryViewHolder.textView.setText(w.title);
        Glide.with(mCtx)
                .load(w.url)
                .into(categoryViewHolder.imageView);
        if (w.isFavourite) {
            categoryViewHolder.checkBoxFav.setChecked(true);
        }

    }

    @Override
    public int getItemCount() {
        return wallpaperList.size();
    }

    class WallpaperViewHolder extends RecyclerView.ViewHolder
            implements View.OnClickListener, CompoundButton.OnCheckedChangeListener {
        TextView textView;
        ImageView imageView;
        CheckBox checkBoxFav;
        ImageButton buttonShare, buttonDownload;



        public WallpaperViewHolder(View itemView) {

            super(itemView);
            textView = itemView.findViewById(R.id.text_view_cat_title);
            imageView=itemView.findViewById(R.id.image_view);

            checkBoxFav = itemView.findViewById(R.id.checkbox_fav);
            buttonShare = itemView.findViewById(R.id.button_share);
            buttonDownload = itemView.findViewById(R.id.button_download);

            checkBoxFav.setOnCheckedChangeListener(this);
            buttonShare.setOnClickListener(this);
            buttonDownload.setOnClickListener(this);
        }
        @Override
        public void onClick(View view) {
            switch (view.getId()) {
                case R.id.button_share:

                    shareWallpaper(wallpaperList.get(getAdapterPosition()));

                    break;
                case R.id.button_download:
                    downloadWallpaper(wallpaperList.get(getAdapterPosition()));
                    break;

            }

        }

        private void shareWallpaper(wallpaper w) {
            ((Activity) mCtx).findViewById(R.id.progressbar).setVisibility(View.VISIBLE);

            Glide.with(mCtx)
                    .asBitmap()
                    .load(w.url)
                    .into(new SimpleTarget<Bitmap>() {
                              @Override
                              public void onResourceReady(@NonNull Bitmap resource, @Nullable Transition<? super Bitmap> transition){
                                  ((Activity) mCtx).findViewById(R.id.progressbar).setVisibility(View.GONE);

                                  Intent intent = new Intent(Intent.ACTION_SEND);
                                  intent.setType("application/*");
                                  intent.putExtra(Intent.EXTRA_STREAM, getLocalBitmapUri(resource));

                                  mCtx.startActivity(Intent.createChooser(intent, "NoteBlock"));
                              }
                          }

                    );
        }

        private Uri getLocalBitmapUri(Bitmap bmp) {
            Uri bmpUri = null;
            try {
                File file = new File(mCtx.getExternalFilesDir(Environment.DIRECTORY_DOCUMENTS),
                        "NoteBlock" + System.currentTimeMillis() + ".pdf");
                FileOutputStream out = new FileOutputStream(file);
                bmp.compress(Bitmap.CompressFormat.PNG, 100, out);

                out.close();
                bmpUri = Uri.fromFile(file);
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
            return bmpUri;
        }

        private void downloadWallpaper(final wallpaper wallpaper) {
            ((Activity) mCtx).findViewById(R.id.progressbar).setVisibility(View.VISIBLE);

            Glide.with(mCtx)
                    .asBitmap()
                    .load(wallpaper.url)
                    .into(new SimpleTarget<Bitmap>() {
                              @Override
                              public void onResourceReady(Bitmap resource, Transition<? super Bitmap> transition) {
                                  ((Activity) mCtx).findViewById(R.id.progressbar).setVisibility(View.GONE);

                                  Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);

                                  Uri uri = saveWallpaperAndGetUri(resource, wallpaper.id);

                                  if (uri != null) {
                                      intent.setDataAndType(uri, "application/pdf");
                                      mCtx.startActivity(Intent.createChooser(intent, "NoteBlock"));
                                  }
                              }
                          }
                    );
        }


        private Uri saveWallpaperAndGetUri(Bitmap bitmap, String id) {
            if (ContextCompat.checkSelfPermission(mCtx, android.Manifest.permission.WRITE_EXTERNAL_STORAGE)
                    != PackageManager.PERMISSION_GRANTED) {

                if (ActivityCompat
                        .shouldShowRequestPermissionRationale((Activity) mCtx, android.Manifest.permission.WRITE_EXTERNAL_STORAGE)) {

                    Intent intent = new Intent();
                    intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);

                    Uri uri = Uri.fromParts("package", mCtx.getPackageName(), null);
                    intent.setData(uri);

                    mCtx.startActivity(intent);

                } else {
                    ActivityCompat.requestPermissions((Activity) mCtx, new String[]{android.Manifest.permission.WRITE_EXTERNAL_STORAGE}, 100);
                }
                return null;
            }

            File folder = new File(Environment.getExternalStorageDirectory().toString() + "/NoteBlock");
            folder.mkdirs();

            File file = new File(folder, id + ".jpg");
            try {
                FileOutputStream out = new FileOutputStream(file);
                bitmap.compress(Bitmap.CompressFormat.JPEG, 100, out);
                out.flush();
                out.close();

                return Uri.fromFile(file);
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
            return null;
        }

        @Override
        public void onCheckedChanged(CompoundButton compoundButton, boolean b) {

            if (FirebaseAuth.getInstance().getCurrentUser() == null) {
                Toast.makeText(mCtx, "Please login first...", Toast.LENGTH_LONG).show();
                compoundButton.setChecked(false);
                return;
            }


            int position = getAdapterPosition();
            wallpaper w = wallpaperList.get(position);
            DatabaseReference dbFavs = FirebaseDatabase.getInstance().getReference("users")
                    .child(FirebaseAuth.getInstance().getCurrentUser().getUid())
                    .child("favourites")
                    .child(w.category);


            if (b) {
                dbFavs.child(w.id).setValue(w);
            } else {
                dbFavs.child(w.id).setValue(null);
            }
        }
    }
}

我希望获取的输出将共享我获取的pdf存储在本地存储中的文件。

0 个答案:

没有答案