我已经开发了一个墙纸应用程序,该应用程序可以从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存储在本地存储中的文件。