Не удается сохранить файл на SD-карту - PullRequest
0 голосов
/ 21 октября 2019

После нескольких уроков у меня есть код для сохранения созданного растрового изображения на SD-карту. Однако ничего не сохраняется и не создается.

У меня есть способ проверить, могу ли я записать во внешнее хранилище, и он возвращает true (файлы \ папки могут быть созданы). Однако, когда я пытаюсь создать что-то, это просто не будет.

Я также попробовал способ просто записать строку на SD-карту (простой файл), тоже не сработало.

Есть ли какая-либо конфигурация, которую я должен установить в Android Studio для сохранения файлов на SD-карте? Важно: Использование эмулируемого устройства, без физического устройства. Я видел сообщения на SO \ Google о записи на SD-карту. Все они похожи на то, что я уже делаю.

Любая информация очень важна. Спасибо

android-manifest.xml:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.saveview">
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

MainActivity.Java

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        final ViewParaSalvar myCustomView = new ViewParaSalvar(this);
        Boolean CanWrite = isStoragePermissionGranted();


        myCustomView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener(){

            @Override
            public void onGlobalLayout() {

                Bitmap BmpFromView = loadBitmapFromView(myCustomView);
                saveImageToExternalStorage(BmpFromView);
            }
        });
        setContentView(R.layout.activity_main);
    }
    private File GetFinalFileName()
    {
        String root = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES).toString();
        File myDir = new File(root + "/saved_images");
        //boolean created = myDir.mkdirs();
        //ExibirMensagemAlerta(Boolean.toString(created));
        myDir.mkdirs();
        Random generator = new Random();
        int n = 10000;
        n = generator.nextInt(n);
        String fname = "Image-" + n + ".jpg";
        File file = new File(myDir, fname);

        return file;
    }

    private void saveImageToExternalStorage(Bitmap finalBitmap) {
        try
        {
            File file = GetFinalFileName();
            try {
                FileOutputStream out = new FileOutputStream(file);
               finalBitmap.compress(Bitmap.CompressFormat.JPEG, 90, out);
          //      ExibirMensagemAlerta(file.toString());
                out.flush();
                out.close();

            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }

    }
    public static Bitmap loadBitmapFromView(View view)
    {
        view.measure(View.MeasureSpec.UNSPECIFIED, View.MeasureSpec.UNSPECIFIED);
        Bitmap bitmap = Bitmap.createBitmap(view.getMeasuredWidth(), view.getMeasuredHeight(),
                Bitmap.Config.ARGB_8888);
        Canvas canvas = new Canvas(bitmap);
        view.layout(0, 0, view.getWidth(), view.getHeight());
        Log.d("", "combineImages: width: " + view.getWidth());
        Log.d("", "combineImages: height: " + view.getHeight());
        view.draw(canvas);
        return bitmap;
    }
    public void ExibirMensagemAlerta(String msg)
    {
        Toast.makeText(this, msg, Toast.LENGTH_SHORT).show();
    }
    public  boolean isStoragePermissionGranted() {
        Boolean finalPerm;
        if (Build.VERSION.SDK_INT >= 23) {
            if (checkSelfPermission(android.Manifest.permission.WRITE_EXTERNAL_STORAGE)
                    == PackageManager.PERMISSION_GRANTED) {
                //ExibirMensagemAlerta("Permission is granted");
                finalPerm = true;
                return true;
            } else {

              //  ExibirMensagemAlerta("Permission revoked");
                ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1);
                finalPerm = false;
                return false;
            }
        }
        else { //permission is automatically granted on sdk<23 upon installation
            //ExibirMensagemAlerta("Permission is granted");
            finalPerm = true;
            return true;
        }

    }
}
...