Я хочу получить изображение из URL и поделиться им. Я работаю над приложением для обоев, где вы просматриваете изображения, и когда вы хотите поделиться изображением, вы нажимаете на кнопку Отправить и там, где выполняется этот код, и я используйте этот код, и он работает на всех Android версиях ниже Android Q, и я добавил необходимые разрешения в манифесте и в коде, и, как я сказал, он отлично работает во всех других android версиях, кроме Q
Я использую здесь библиотеку Ion
public class ShareTask extends AsyncTask<String, String, String> {
private Context context;
private ProgressDialog pDialog;
String path;
File file;
public ShareTask(Context context) {
this.context = context;
}
@Override
protected void onPreExecute() {
// TODO Auto-generated method stub
super.onPreExecute();
pDialog = new ProgressDialog(context);
pDialog.setMessage("Download ...");
pDialog.setIndeterminate(false);
pDialog.setCancelable(false);
pDialog.show();
}
@Override
protected String doInBackground(String... args) {
// TODO Auto-generated method stub
path = args[0];
String idStr = path.substring(path.lastIndexOf('/') + 1);
File filepath = Environment.getExternalStorageDirectory();
File dir = new File(filepath.getAbsolutePath() + "/Download/");
dir.mkdirs();
String fileName = idStr;
file = new File(dir, fileName);
Ion.with(getApplicationContext()).load(path)
.write(file);
return null;
}
@Override
protected void onPostExecute(String args) {
// TODO Auto-generated method stub
Intent share = new Intent(Intent.ACTION_SEND);
share.setType("image/*");
share.putExtra(Intent.EXTRA_STREAM, FileProvider.getUriForFile(SlideImageActivity.this, BuildConfig.APPLICATION_ID + ".provider", file));
// SHARE URL
share.putExtra(android.content.Intent.EXTRA_TEXT, "https://play.google.com/store/apps/details?id=" + BuildConfig.APPLICATION_ID);
startActivity(Intent.createChooser(share, "Share the photo"));
pDialog.dismiss();
}
}
, и я использую это для ее выполнения, я передаю URL-адрес изображения
(new ShareTask(SlideImageActivity.this)).execute(Constant.SERVER_IMAGE_UPFOLDER_CATEGORY + mAllImageCatName[position] +
"/" + mAllImages[position]);
и в Android Q это дает мне это в Logcat
java.lang.SecurityException: Permission Denial: reading androidx.core.content.FileProvider uri content://com.example.wallpaper.provider/external_files/Download/34496_8b4903cd52ec2e54cb85c3512978dee3-1.jpg from pid=22692, uid=1000 requires the provider be exported, or grantUriPermission()
at android.content.ContentProvider.enforceReadPermissionInner(ContentProvider.java:729)
at android.content.ContentProvider$Transport.enforceReadPermission(ContentProvider.java:602)
at android.content.ContentProvider$Transport.enforceFilePermission(ContentProvider.java:593)
at android.content.ContentProvider$Transport.openTypedAssetFile(ContentProvider.java:507)
at android.content.ContentProviderNative.onTransact(ContentProviderNative.java:307)
at android.os.Binder.execTransactInternal(Binder.java:1021)
at android.os.Binder.execTransact(Binder.java:994)