Как поделиться GIF через Intent в Android Studio - PullRequest
0 голосов
/ 10 июня 2019

У меня есть приложение GIF Maker, теперь я хочу поделиться этим GIF-файлом непосредственно из приложения с другими приложениями (GMAIL, WHATSAPP ETC)

Как отправить созданный GIF из приложения

Код, который я использую для сохранения GIF в Галерее / Телефоне

private void saveGif() {
    new AsyncTask<Void, Integer, Void>() {
        ProgressDialog progressDialog;
        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            progressDialog = new ProgressDialog(GifMakerActivity.this);
            progressDialog.setMax(100);
            progressDialog.setMessage("Please wait..");
            progressDialog.setCancelable(false);
            progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
            progressDialog.show();
        }

        @Override
        protected Void doInBackground(Void... voids) {
            File filePath;
            if (TextUtils.isEmpty(gifPath)) {
                int random = (int) (Math.random() * 9000) + 1000;
                File gifMaker = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), "Gif Maker");
                if (!gifMaker.mkdir()) {
                    Log.e("GifMakerActivity: ", "Directory doesn't exist");
                }
                filePath = new File(gifMaker, "GifMaker_" + random + ".gif");



            } else {
                filePath = new File(gifPath);

            }

            try {
                int size = bitmaps.size();
                int w = bitmaps.get(0).getWidth();
                int h = bitmaps.get(0).getHeight();
                GifEncoder gifEncoder = new GifEncoder();
                gifEncoder.init(w, h, filePath.getAbsolutePath(), GifEncoder.EncodingType.ENCODING_TYPE_FAST);
                for (Bitmap bitmap : bitmaps) {
                    gifEncoder.encodeFrame(Bitmap.createScaledBitmap(bitmap, w, h, false), duration);
                    publishProgress(100/size);
                }
                gifEncoder.close();
            } catch (FileNotFoundException e) {}

            if (progressDialog.getProgress() <= progressDialog.getMax()) {
                publishProgress(progressDialog.getMax() - progressDialog.getProgress());
            }

            /*ByteArrayOutputStream bos = new ByteArrayOutputStream();
            AnimatedGifEncoder encoder = new AnimatedGifEncoder();
            encoder.start(bos);
            Log.d("duration: ", duration + "");
            encoder.setDelay(duration);
            encoder.setRepeat(0);

            for (Bitmap bitmap : bitmaps) {
                encoder.addFrame(bitmap);
            }

            encoder.finish();

            FileOutputStream outputStream;
            try {
                outputStream = new FileOutputStream(gifMaker.getAbsolutePath());
                outputStream.write(bos.toByteArray());
                outputStream.flush();
                outputStream.close();
                bos.flush();
                bos.close();
            } catch (FileNotFoundException e) {
            } catch (IOException e) {
            }*/

            /*AnimatedGifWriter writer = new AnimatedGifWriter(true);
            try {
                OutputStream os = new FileOutputStream(gifMaker);
                writer.prepareForWrite(os, -1, -1);
                for (Bitmap bitmap : bitmaps) {
                    writer.writeFrame(os, bitmap);
                }
                writer.finishWrite(os);
            } catch (Exception e) {

            }*/

            MediaScannerConnection.scanFile(GifMakerActivity.this,
                    new String[] { filePath.getAbsolutePath() }, null,
                    new MediaScannerConnection.OnScanCompletedListener() {
                        public void onScanCompleted(String path, Uri uri) {
                            //Log.i("ExternalStorage", "Scanned " + path + ":");
                            //Log.i("ExternalStorage", "-> uri=" + uri);
                        }
                    });

            return null;
        }

        @Override
        protected void onProgressUpdate(Integer... values) {
            super.onProgressUpdate(values);
            progressDialog.incrementProgressBy(values[0]);
        }

        @Override
        protected void onPostExecute(Void aVoid) {
            super.onPostExecute(aVoid);
            if (progressDialog.getProgress() == progressDialog.getMax()) {
                progressDialog.dismiss();

                sendcomletionnotification();
            }
        }
    }.execute();
}

Как я могу поделиться GIF, который пользователь создает, и поделиться с другими приложениями

Есть ли способ, который я могу использовать, чтобы решитьэта ошибка.

Ответы [ 2 ]

0 голосов
/ 12 июня 2019

Используйте переменную filePath в предоставленном фрагменте кода, чтобы создать File Uri для хранения потока данных, а затем используйте его ACTION_SEND для предоставления этих данных изображения. Просто назовите этот метод:

private void shareImage() {
    Intent share = new Intent(Intent.ACTION_SEND);

   // For sharing png image only:
   // setType("image/png"); 
   // For sharing jpeg image only: 
   // setType("image/jpeg");

    share.setType("image/*");

    Uri uri = Uri.fromFile(filePath);
    share.putExtra(Intent.EXTRA_STREAM, uri);
    startActivity( Intent.createChooser(share, "Share this image to your friends!") );
   }

Чтобы поделиться цитатой или чем-то еще в виде текста, используйте этот метод:

private void shareTextUrl() {
    Intent share = new Intent(Intent.ACTION_SEND);
    share.setType("text/plain");
    share.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);
    share.putExtra(Intent.EXTRA_SUBJECT, "Avoiding complexity reduces bugs");
    share.putExtra(Intent.EXTRA_TEXT, "Quote by Linus Torvalds");
    startActivity(Intent.createChooser(share, "Share this quote!"));
}
0 голосов
/ 11 июня 2019

Ну, вы можете попробовать найти файл вашего приложения и поделиться с другими приложениями с помощью метода намерения Попробуйте это в вашем методе, чтобы отправить файл:

Intent i = new Intent();
i.setAction(Intent.ACTION_SEND);
i.setType("img/*");
i.setPackage("com.whatsapp");
startActivity(i);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...