Как поделиться скриншотом текущей страницы с помощью намерения? - PullRequest
0 голосов
/ 09 апреля 2019

Я занимаюсь разработкой приложения для Android и блогов, в котором я хочу поделиться своим текущим снимком экрана со страницей блога. Я пытаюсь показать, что формат файла не поддерживается. Пожалуйста, помогите мне найти мою ошибку. Заранее спасибо

MyAdapter.java

        sendImage.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Bitmap app_snap = ((BitmapDrawable)movie_image.getDrawable()).getBitmap();
                String file_path = Environment.getExternalStorageDirectory().getAbsolutePath() + "/SaveImg";
                System.out.println("****FILEPATH **** : " + file_path);
                File imagePath = new File(Environment.getExternalStorageDirectory() + "/scr.png");
                FileOutputStream fos;
                try {
                    fos = new FileOutputStream(imagePath);
                    System.out.println("****FILEPATH1 **** : " + file_path);
                    app_snap.compress(Bitmap.CompressFormat.PNG, 200, fos);
                    System.out.println("****FILEPATH2 **** : " + file_path);
                    fos.flush();
                    fos.close();
                }
                catch (IOException e) {
                    System.out.println("GREC****** "+ e.getMessage());
                }
                Intent sharingIntent = new Intent();
                Uri imageUri = Uri.parse(imagePath.getAbsolutePath());
                sharingIntent.setAction(Intent.ACTION_SEND);
                sharingIntent.setType("image/png");
                sharingIntent.putExtra(Intent.EXTRA_STREAM, imageUri);
                context.startActivity(sharingIntent);
            }
        });

Ответы [ 2 ]

0 голосов
/ 09 апреля 2019

Вы можете получить Bitmap вашего экрана внутри ваших макетов.Где view будет вашим макетом view s, таким как Linear или RelativeLayout

view.setDrawingCacheEnabled(true);

view.buildDrawingCache();

Bitmap returnedBitmap = view.getDrawingCache();

, затем необходимо преобразовать в byte[], чтобы вы могли отправить с Intent следующим образом:

ByteArrayOutputStream stream = new ByteArrayOutputStream();
returnedBitmap.compress(Bitmap.CompressFormat.PNG, 100, stream);
byte[] byteArray = stream.toByteArray();

и отправьте данные с Intent следующим образом:

Intent intent = new Intent(this, SecondActivity.class);
intent.putExtra("bitmap_",byteArray);

получите Intent на свой SecondActivity, например:

byte[] byteArray = getIntent().getByteArrayExtra("bitmap_");
Bitmap bmp = BitmapFactory.decodeByteArray(byteArray, 0, byteArray.length);
0 голосов
/ 09 апреля 2019

Вот код, который позволил сохранить мой скриншот на SD-карте и использовать его позже для любых ваших нужд:

Во-первых, вам необходимо добавить соответствующее разрешение для сохранения файла:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

А это код (запущенный в Activity):

private void takeScreenshot() {
    Date now = new Date();
    android.text.format.DateFormat.format("yyyy-MM-dd_hh:mm:ss", now);

    try {
        // image naming and path  to include sd card  appending name you choose for file
    String mPath = Environment.getExternalStorageDirectory().toString() + "/" + now + ".jpg";

    // create bitmap screen capture
    View v1 = getWindow().getDecorView().getRootView();
    v1.setDrawingCacheEnabled(true);


      Bitmap bitmap = Bitmap.createBitmap(v1.getDrawingCache());
        v1.setDrawingCacheEnabled(false);

        File imageFile = new File(mPath);

        FileOutputStream outputStream = new FileOutputStream(imageFile);
        int quality = 100;
        bitmap.compress(Bitmap.CompressFormat.JPEG, quality, outputStream);
        outputStream.flush();
        outputStream.close();

        openScreenshot(imageFile);
    } catch (Throwable e) {
        // Several error may come out with file handling or DOM
        e.printStackTrace();
    }
}

И вот как вы можете открыть недавно сгенерированный образ:

private void openScreenshot(File imageFile) {
    Intent intent = new Intent();
    intent.setAction(Intent.ACTION_SEND);
    Uri uri = Uri.fromFile(imageFile);
    intent.setDataAndType(uri, "image/*");
    startActivity(intent);
}

Если выхотите использовать это при просмотре фрагмента, затем используйте:

View v1 = getActivity().getWindow().getDecorView().getRootView();

вместо

View v1 = getWindow().getDecorView().getRootView();

в функции takeScreenshot ()

Примечание:

ThisРешение не работает, если ваш диалог содержит вид поверхности.Для получения дополнительной информации, пожалуйста, проверьте ответ на следующий вопрос:

Android Снимок экрана Снимок экрана Surface View показывает черный экран

, если у вас есть какие-либо сомнения, пожалуйста, пройдите через это ссылка

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...