【问题标题】:Trying to save picture to a particular Pictures folder that has not been created试图将图片保存到尚未创建的特定图片文件夹
【发布时间】:2012-01-23 18:20:27
【问题描述】:

我设法让photo1.jpg 保存到我在SD 卡上创建的Pictures/mockFolder,这是代码供以后参考。

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();
    }


}

【问题讨论】:

    标签: android camera save directory image


    【解决方案1】:

    您可能还必须创建新文件。
    完成File file = new File(path);后,拨打createNewFile();
    或者更确切地说:

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

    【讨论】:

    • 创建后,您不会立即在图库中找到该文件夹​​。图库需要重新扫描 SD 卡以检测自上次检查后创建的新文件夹/文件。
    • @kaciula 那么如何确定它是否已创建?
    • 您可以在手机上激活 USB 共享并手动查看文件夹。
    【解决方案2】:

    您可以通过调用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);
    

    【讨论】:

    • 好点,尽管自从我发布问题并发现很久以前我一直在编辑我的代码。不过谢谢!
    • 我已经编辑了我的答案。您是否在您的应用程序中设置了写入 sd 卡的权限?这可以解释活动挂起的原因。
    • 谢谢,我会尝试并回复您。我不知道我在做什么是写入 SD 卡。我希望写入内存,这可能吗?
    • 这似乎没有什么不同。我也检查了 SD 卡,并没有在其上创建任何内容。
    • 再次更新了答案。您需要指定图片的完整路径,以便相机应用知道图片的保存位置。
    猜你喜欢
    • 2015-06-24
    • 1970-01-01
    • 1970-01-01
    • 2020-04-19
    • 2013-05-27
    • 1970-01-01
    • 2012-02-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多