问题描述
fab1按钮应该下载图像,而fab2按钮应该共享图像。但是在按下fab1时,会显示一个吐司,但未下载文件(未在库中显示),当按下fab2共享按钮时,会打开一个提示,提示您提供不同的应用程序来共享图像。 无论我是否进一步将图像共享给任何应用程序(有效)或取消,图像都将下载。
可能我在代码安排方面做错了,但找不到。帮助。
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;
}
}
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)