Попытка сохранить изображение в определенной папке Изображения, которая не была создана - PullRequest
4 голосов
/ 19 декабря 2011

Мне удалось получить photo1.jpg для сохранения на Pictures/mockFolder, который я создал на SD-карте, вот код для дальнейшего использования.

public class CameraActivity extends Activity
{

    final int PICTURE_ACTIVITY = 1; 

    @Override
    public void onCreate(Bundle savedInstanceState)
    {  
        super.onCreate(savedInstanceState);

        String dir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES) + "/mockFolder/"; 
        File newdir = new File(dir); 
        newdir.mkdirs();
        String file = dir + "photo1.jpg";
        File newfile = new File(file);
        try {
            newfile.createNewFile();
        } catch (IOException e) {}       

        Uri outputFileUri = Uri.fromFile(newfile);

        Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
        cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri);
        startActivityForResult(cameraIntent, PICTURE_ACTIVITY);
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
        super.onActivityResult(requestCode, resultCode, intent);

        AlertDialog msgDialog;
        if (resultCode == RESULT_CANCELED) {
            msgDialog = createAlertDialog("Alert", "Picture was not saved. Please try again.", "OK");

        } else {

            msgDialog = createAlertDialog("Alert", "Picture was saved successfully.", "OK");
        }       
        msgDialog.show();
    }

    private AlertDialog createAlertDialog(String title, String msg, String buttonText){
        AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(this);
        AlertDialog msgDialog = dialogBuilder.create();
        msgDialog.setTitle(title);
        msgDialog.setMessage(msg);
        msgDialog.setButton(buttonText, new DialogInterface.OnClickListener(){
            @Override
            public void onClick(DialogInterface dialog, int idx){
                finish();
            }
        });

        return msgDialog;
    }

    public void finish()
    {
        super.finish();
    }


}

Ответы [ 2 ]

4 голосов
/ 19 декабря 2011

Вы можете улучшить свой код, позвонив newFolder.mkdirs() вместо newFolder.mkdir(). mkdirs() создает все папки, необходимые по указанному пути.

Кроме того, вы забыли добавить косую черту после Environment.DIRECTORY_PICTURES при установке переменной пути.

Также убедитесь, что у вашего приложения есть разрешение на запись на SD-карту.

Добавить это в AndroidManifest.xml:

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

Environment.DIRECTORY_PICTURES содержит только имя папки для изображений. Вам необходимо указать полный путь к локации.

File path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);
4 голосов
/ 19 декабря 2011

Возможно, вам также придется создать новый файл.
После того, как вы сделали File file = new File(path);, позвоните createNewFile();
Или, скорее:

String dir = Environment.DIRECTORY_PICTURES + "mockFolder/"; 
String name = "photo1.jpg"; 
File file = new File(dir, name); 
file.createNewFile();
...