Java 我试图实现一个imageViewer类来查看、下载和共享图像,使用下面的代码,但它的行为不正常
fab1按钮用于下载图像,fab2按钮用于共享图像。但按下fab1时会显示一个祝酒词,但文件不会被下载(gallary中未显示),当按下fab2共享按钮时,会打开一个提示,提供不同的应用程序来共享图像。 无论我是否将图像进一步共享到任何应用程序(它可以工作)或取消,图像都会下载 可能我在代码安排上有问题,但找不到。救命啊Java 我试图实现一个imageViewer类来查看、下载和共享图像,使用下面的代码,但它的行为不正常,java,android,download,picasso,Java,Android,Download,Picasso,fab1按钮用于下载图像,fab2按钮用于共享图像。但按下fab1时会显示一个祝酒词,但文件不会被下载(gallary中未显示),当按下fab2共享按钮时,会打开一个提示,提供不同的应用程序来共享图像。 无论我是否将图像进一步共享到任何应用程序(它可以工作)或取消,图像都会下载 可能我在代码安排上有问题,但找不到。救命啊 package com.ashishapps.android.diwaliwallpapaersclient; import android.Manifest;
package com.ashishapps.android.diwaliwallpapaersclient;
import android.Manifest;
import android.annotation.SuppressLint;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.graphics.Bitmap;
import android.graphics.drawable.BitmapDrawable;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.Build;
import android.os.Bundle;
import android.os.Environment;
import android.provider.MediaStore;
import android.support.design.widget.FloatingActionButton;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.ImageView;
import android.widget.Toast;
import com.google.android.gms.ads.AdRequest;
import com.google.android.gms.ads.AdView;
import com.google.android.gms.ads.MobileAds;
import com.squareup.picasso.Picasso;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
public class ImageViewer extends AppCompatActivity {
String extracteurl;
ImageView imageView;
FloatingActionButton fab1, fab2;
private static final int PERMISSION_REQUEST_CODE = 1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_image_viewer);
extracteurl = getIntent().getExtras().getString("URL");
imageView = findViewById(R.id.imageviewer);
Picasso.get().load(extracteurl).into(imageView);
fab1 = findViewById(R.id.fab1);
fab1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//asking for permission
//////Download File
SaveImage(ImageViewer.this, extracteurl);
}
});
fab2 = findViewById(R.id.fab2);
fab2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
readpermission();
BitmapDrawable bitmapDrawable = ((BitmapDrawable) imageView.getDrawable());
Bitmap bitmap = bitmapDrawable.getBitmap();
String bitmapPath = MediaStore.Images.Media.insertImage(getContentResolver(), bitmap, "Shared from WallpaperApp by AshishApps", null);
Uri bitmapUri = Uri.parse(bitmapPath);
Intent shareIntent = new Intent(Intent.ACTION_SEND);
//sharing only to whatsapp
// shareIntent.setPackage("com.whatsapp");
shareIntent.setType("*/*");// shareIntent.setType("image/jpeg");
shareIntent.putExtra(Intent.EXTRA_STREAM, bitmapUri);
shareIntent.putExtra(Intent.EXTRA_TEXT, "Download " + "https://play.google.com/store/apps/details?id=" + getPackageName());
//shareIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
startActivity(Intent.createChooser(shareIntent, "Share Image"));
}
});
MobileAds.initialize(this);
AdView adView = findViewById(R.id.bannerad);
AdRequest adRequest = new AdRequest.Builder().build();
adView.loadAd(adRequest);
}
/////////////////////////////saving image
private static void SaveImage(final Context context, final String MyUrl) {
final ProgressDialog progress = new ProgressDialog(context);
class SaveThisImage extends AsyncTask<Void, Void, Void> {
@Override
protected void onPreExecute() {
super.onPreExecute();
progress.setTitle("Processing");
progress.setMessage("Please Wait...");
progress.setCancelable(false);
progress.show();
}
@Override
protected Void doInBackground(Void... arg0) {
try {
File sdCard = Environment.getExternalStorageDirectory();
@SuppressLint("DefaultLocale") String fileName = String.format("%d.jpg", System.currentTimeMillis());
File dir = new File(sdCard.getAbsolutePath() + "/savedImageName");
dir.mkdirs();
final File myImageFile = new File(dir, fileName); // Create image file
FileOutputStream fos = null;
try {
fos = new FileOutputStream(myImageFile);
Bitmap bitmap = Picasso.get().load(MyUrl).get();
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, fos);
Intent intent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
intent.setData(Uri.fromFile(myImageFile));
context.sendBroadcast(intent);
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
} catch (Exception e) {
}
return null;
}
@Override
protected void onPostExecute(Void result) {
super.onPostExecute(result);
if (progress.isShowing()) {
progress.dismiss();
}
Toast.makeText(context, "Saved", Toast.LENGTH_SHORT).show();
}
}
SaveThisImage shareimg = new SaveThisImage();
shareimg.execute();
}
//////////////////////////////////////////////////////////////////////////////////
public void readpermission() {
if (Build.VERSION.SDK_INT >= 23) {
if (checkPermission()) {
// Code for above or equal 23 API Oriented Device
// Your Permission granted already .Do next code
} else {
requestPermission(); // Code for permission
}
} else {
// Code for Below 23 API Oriented Devic// Do next code
}
}
private boolean checkPermission() {
int result = ContextCompat.checkSelfPermission(ImageViewer.this, Manifest.permission.READ_EXTERNAL_STORAGE);
if (result == PackageManager.PERMISSION_GRANTED) {
return true;
} else {
return false;
}
}
private void requestPermission() {
if (ActivityCompat.shouldShowRequestPermissionRationale(ImageViewer.this, Manifest.permission.READ_EXTERNAL_STORAGE)) {
Toast.makeText(ImageViewer.this, "Write External Storage permission allows us to do store images. Please allow this permission in App Settings.", Toast.LENGTH_LONG).show();
} else {
ActivityCompat.requestPermissions(ImageViewer.this, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, PERMISSION_REQUEST_CODE);
}
}
@Override
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
switch (requestCode) {
case PERMISSION_REQUEST_CODE:
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
Log.e("value", "Permission Granted, Now you can use local drive .");
} else {
Log.e("value", "Permission Denied, You cannot use local drive .");
}
break;
}
}
package com.ashishapps.android.diwaliwallpapaersclient;
导入android.Manifest;
导入android.annotation.SuppressLint;
导入android.app.ProgressDialog;
导入android.content.Context;
导入android.content.Intent;
导入android.content.pm.PackageManager;
导入android.graphics.Bitmap;
导入android.graphics.drawable.BitmapDrawable;
导入android.net.Uri;
导入android.os.AsyncTask;
导入android.os.Build;
导入android.os.Bundle;
导入android.os.Environment;
导入android.provider.MediaStore;
导入android.support.design.widget.FloatingActionButton;
导入android.support.v4.app.ActivityCompat;
导入android.support.v4.content.ContextCompat;
导入android.support.v7.app.AppActivity;
导入android.util.Log;
导入android.view.view;
导入android.widget.ImageView;
导入android.widget.Toast;
导入com.google.android.gms.ads.AdRequest;
导入com.google.android.gms.ads.AdView;
导入com.google.android.gms.ads.MobileAds;
导入com.squareup.picasso.picasso;
导入java.io.File;
导入java.io.FileOutputStream;
导入java.io.IOException;
公共类ImageViewer扩展AppCompatActivity{
弦提取器;
图像视图图像视图;
浮动操作按钮fab1、fab2;
私有静态最终int权限\请求\代码=1;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u image\u查看器);
extracteurl=getIntent().getExtras().getString(“URL”);
imageView=findViewById(R.id.imageviewer);
Picasso.get().load(extracteurl).into(imageView);
fab1=findViewById(R.id.fab1);
fab1.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
//请求许可
//////下载文件
保存图像(ImageViewer.this,extracteurl);
}
});
fab2=findViewById(R.id.fab2);
fab2.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
readpermission();
BitmapDrawable BitmapDrawable=((BitmapDrawable)imageView.getDrawable());
位图位图=bitmapDrawable.getBitmap();
字符串bitmapPath=MediaStore.Images.Media.insertImage(getContentResolver(),位图,“Shapps从WallperApp共享”,null);
Uri bitmapUri=Uri.parse(bitmapPath);
意向共享意向=新意向(意向.行动\发送);
//仅共享给whatsapp
//shareIntent.setPackage(“com.whatsapp”);
shareIntent.setType(“*/*”);//shareIntent.setType(“图像/jpeg”);
shareIntent.putExtra(Intent.EXTRA_流,位图URI);
shareIntent.putExtra(Intent.EXTRA_文本,“下载”+)https://play.google.com/store/apps/details?id=“+getPackageName());
//addFlags(Intent.FLAG\授予\读取\ URI\权限);
startActivity(Intent.createChooser(shareIntent,“共享图像”));
}
});
MobileAds.初始化(此);
AdView AdView=findViewById(R.id.bannerad);
AdRequest AdRequest=新建AdRequest.Builder().build();
adView.loadAd(adRequest);
}
/////////////////////////////保存图像
私有静态void SaveImage(最终上下文,最终字符串MyUrl){
最终进度对话框进度=新进度对话框(上下文);
类SaveThisImage扩展了异步任务{
@凌驾
受保护的void onPreExecute(){
super.onPreExecute();
进度。设置标题(“处理”);
progress.setMessage(“请稍候…”);
进度。可设置可取消(false);
progress.show();
}
@凌驾
受保护的Void doInBackground(Void…arg0){
试一试{
文件sdCard=Environment.getExternalStorageDirectory();
@SuppressLint(“DefaultLocale”)字符串文件名=String.format(“%d.jpg”,System.currentTimeMillis());
File dir=新文件(sdCard.getAbsolutePath()+“/savedImageName”);
dir.mkdirs();
最终文件myImageFile=新文件(目录,文件名);//创建图像文件
FileOutputStream=null;
试一试{
fos=新文件输出流(myImageFile);
位图位图=Picasso.get().load(MyUrl.get();
bitmap.compress(bitmap.CompressFormat.JPEG,100,fos);
意图=新意图(Intent.ACTION\u MEDIA\u SCANNER\u SCAN\u FILE);
setData(Uri.fromFile(myImageFile));
发送广播(意图);
}捕获(IOE异常){
e、 printStackTrace();
}最后{
试一试{
fos.close();
}捕获(IOE异常){
e、 printStackTrace();
}
}
}捕获(例外e){
}
返回null;
}
@凌驾
受保护的void onPostExecute(void结果){
super.onPostExecute(结果);
if(progress.isShowing()){
进步。解散();
}
Toast.makeText(上下文“保存”,Toast.LENGTH_SHORT).show();
}
}
SaveThisImage shareimg=新建SaveThisImag