Я не могу поделиться изображением с помощью намерения обмена и не могу создать каталог - PullRequest
0 голосов
/ 15 мая 2018

Я не могу передать изображение с помощью намерения «Поделиться». Приложение запускается, но когда я пытаюсь отправить изображение другу в whatsApp, оно говорит: « Не удается отправить, попробуйте еще раз» и при совместном использовании с Gmail.там написано " Невозможно прикрепить пустой файл ". Я также установил разрешение в Манифестах.Я предполагаю, что есть какая-то проблема при создании файла или, возможно, пути.

Пожалуйста, проверьте код ниже:

share.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {



            Bitmap icon = BitmapFactory.decodeResource(getResources(), img);
            Intent sharingIntent = new Intent(android.content.Intent.ACTION_SEND);
            sharingIntent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
            sharingIntent.setType("image/*");
            ByteArrayOutputStream bytes = new ByteArrayOutputStream();
            icon.compress(Bitmap.CompressFormat.JPEG, 100, bytes);
             File f = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES)+ File.separator + "temporary_file.jpg");
           // File f1=Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);

            //File f = new File(Environment.getExternalStorageDirectory() + "/save_picture", "temporary_file.jpg");

            try {
              f.createNewFile();
               // f.mkdir();
                f.createNewFile();
                FileOutputStream fo = new FileOutputStream(f);
                fo.write(bytes.toByteArray());
            } catch (IOException e) {
                e.printStackTrace();

            }
           // sharingIntent.putExtra(Intent.EXTRA_STREAM, Uri.parse("content://" + Environment.getExternalStorageDirectory()));
             sharingIntent.putExtra(Intent.EXTRA_STREAM,Uri.parse("content:///sdcard/temporary_file.jpg"));
            startActivity(Intent.createChooser(sharingIntent, "Share via: "));


        }
    });

Ответы [ 2 ]

0 голосов
/ 15 мая 2018

Я думаю, что URI неправильно сформирован.Попробуйте это:

Uri.fromFile(file);

вместо

Uri.parse("content:///sdcard/temporary_file.jpg"); // Here probably file path is wrong

Используя Uri.fromFile, вы обеспечиваете правильность URI файла.

Если ваш targetSdkVersion равен 24+, вам нужноиспользовать содержимое: // вместо файла: //.Чтобы перейти, проверьте этот вопрос.

android.os.FileUriExposedException: файл: ///storage/emulated/0/test.txt, доступный за пределами приложения через Intent.getData ()

0 голосов
/ 15 мая 2018

Для Android 6 и выше, добавление разрешений в манифесте недостаточно, вы должны запросить разрешение во время выполнения. Например, для разрешения внешнего хранилища вы должны сделать это:

if (checkSelfPermission(android.Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) {
    // permission granted, you can write external storage
}

Если не предоставлено, вы должны запросить разрешение:

final int READ_STORAGE_PERMISSION_REQUEST_CODE = 1212;            
ActivityCompat.requestPermissions((Activity) context, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},
                WRITE_EXTERNAL_STORAGE);

}

Для чтения с внешнего хранилища необходимо заменить WRITE_EXTERNAL_STORAGE на READ_EXTERNAL_STORAGE

РЕДАКТИРОВАТЬ:

Переопределить onRequestPermissionsResult в вашей деятельности:

@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] results) {
    super.onRequestPermissionsResult(requestCode, permissions, results);
    if(PackageManager.PERMISSION_GRANTED == grantResults[0]){

        //The user accepted the permissions requests, you can do your stuffs here
    }
}

Вы можете найти больше информации здесь

...