Получение изображения из URL и обмен им не работает в Android 10 (Q) - PullRequest
0 голосов
/ 18 апреля 2020

Я хочу получить изображение из 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)
...