我制作了一个meme应用程序,它从api获取图像url,我正在解析它们并使用glide在recyler视图中显示,在我的项目布局中,我有两个按钮,一个用于共享,一个用于下载图像,我希望当用户单击下载按钮时,图像下载到用户手机上。
我正在为此使用下载管理器,但图像没有下载,这是我的适配器类
public class Adapter extends RecyclerView.Adapter<Adapter.ViewHolder> {
Context context;
ArrayList<Model> modelArrayList;
public Adapter(Context context, ArrayList<Model> modelArrayList) {
this.context = context;
this.modelArrayList = modelArrayList;
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(context).inflate(R.layout.item_layout,parent,false);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
String memeUrl = modelArrayList.get(position).getUrl();
holder.setImage(memeUrl);
holder.button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent sharing = new Intent(Intent.ACTION_SEND);
sharing.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
sharing.setType("text/plain");
// String sharebody = "Quizz time beautiful app";
String subject = "Hey watch this cool meme Click this link "+memeUrl+"\n\n";
sharing.putExtra(Intent.EXTRA_TEXT, subject);
context.startActivity(Intent.createChooser(sharing, "Share using"));
}
});
holder.buttonDownload.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
try {
downloadImage(memeUrl);
}
catch (Exception e){
e.printStackTrace();
}
}
});
}
@Override
public int getItemCount() {
return modelArrayList.size();
}
public class ViewHolder extends RecyclerView.ViewHolder{
ImageView memeImage;
Button button, buttonDownload;
public ViewHolder(@NonNull View itemView) {
super(itemView);
memeImage = itemView.findViewById(R.id.imageView);
button = itemView.findViewById(R.id.button);
buttonDownload = itemView.findViewById(R.id.btn_download);
}
void setImage(String link){
Glide.with(context).load(link).into(memeImage);
}
}
void downloadImage(String url){
DownloadManager downloadManager = null;
downloadManager = (DownloadManager) context.getSystemService(context.DOWNLOAD_SERVICE);
Uri downloaduri = Uri.parse(url);
DownloadManager.Request request = new DownloadManager.Request(downloaduri);
request.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_WIFI | DownloadManager.Request.NETWORK_MOBILE)
.setAllowedOverRoaming(false)
.setTitle("meme1")
.setMimeType("image/jpeg")
.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED)
.setDestinationInExternalPublicDir(Environment.DIRECTORY_PICTURES, File.separator+"meme1"+".jpg");
downloadManager.enqueue(request);
Toast.makeText(context, "Image downloaded", Toast.LENGTH_SHORT).show();
}
}
logcat
2021-07-05 20:24:20.134 20262-20262/com.choudhary.memegram W/System.err:
java.lang.SecurityException: No permission to write to
/storage/emulated/0/Pictures/meme1.jpg:
Neither user 10340 nor current process has android.permission.WRITE_EXTERNAL_STORAGE.
2021-07-05 20:24:20.145 20262-20262/com.choudhary.memegram W/System.err: at
android.os.Parcel.createException(Parcel.java:1953)
2021-07-05 20:24:20.145 20262-20262/com.choudhary.memegram W/System.err: at
android.os.Parcel.readException(Parcel.java:1921)
mymenifest
<?xml version="1.0" encoding="utf-8"?>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE "/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.MemeGram">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
1条答案
按热度按时间b4lqfgs41#
给你-