【问题标题】:How to save in external memory card ?如何保存在外部存储卡中?
【发布时间】:2014-02-14 17:21:09
【问题描述】:

我已经构建了一个安卓应用程序,我已经实现了保存选项,但是它保存在我的内部存储器中,我如何将它保存在我的外部存储器中?

我的保存代码---

else if(view.getId()==R.id.save_btn){
        //save drawing
        AlertDialog.Builder saveDialog = new AlertDialog.Builder(this);
        saveDialog.setTitle("Save drawing");
        saveDialog.setMessage("Save drawing to device Gallery?");
        saveDialog.setPositiveButton("Yes", new DialogInterface.OnClickListener(){
            public void onClick(DialogInterface dialog, int which){
                //save drawing
                drawView.setDrawingCacheEnabled(true);
                //attempt to save
                String imgSaved = MediaStore.Images.Media.insertImage(
                        getContentResolver(), drawView.getDrawingCache(),
                        UUID.randomUUID().toString()+".png", "drawing");
                //feedback
                if(imgSaved!=null){
                    Toast savedToast = Toast.makeText(getApplicationContext(), 
                            "Drawing saved to Gallery!", Toast.LENGTH_SHORT);
                    savedToast.show();
                }
                else{
                    Toast unsavedToast = Toast.makeText(getApplicationContext(), 
                            "Oops! Image could not be saved.", Toast.LENGTH_SHORT);
                    unsavedToast.show();
                }
                drawView.destroyDrawingCache();
            }
        });
        saveDialog.setNegativeButton("Cancel", new DialogInterface.OnClickListener(){
            public void onClick(DialogInterface dialog, int which){
                dialog.cancel();
            }
        });
        saveDialog.show();
    }

【问题讨论】:

    标签: android paint


    【解决方案1】:

    首先确保您包含正确的权限:

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

    这将为您提供写入和读取权限。 接下来,检查是否可以使用外部存储:

    /* Checks if external storage is available for read and write */
    public boolean isExternalStorageWritable() {
        String state = Environment.getExternalStorageState();
        return Environment.MEDIA_MOUNTED.equals(state);
    }
    
    /* Checks if external storage is available to at least read */
    public boolean isExternalStorageReadable() {
        String state = Environment.getExternalStorageState();
        return Environment.MEDIA_MOUNTED.equals(state) ||
            Environment.MEDIA_MOUNTED_READ_ONLY.equals(state);
    }
    

    现在选择是否要保存到公共目录:

    public File getPublicStorageDir(String directory) {
        // Get the directory for the user's public pictures directory. 
        File file = new File(Environment.getExternalStoragePublicDirectory(
                Environment.DIRECTORY_PICTURES), directory);
        if (!file.mkdirs()) {
            Log.e(LOG_TAG, "Directory not created");
        }
        return file;
    }
    

    或私有目录:

    public File getPrivateStorageDir(Context context, String directory) {
        // Get the directory for the app's private pictures directory. 
        File file = new File(context.getExternalFilesDir(
                Environment.DIRECTORY_PICTURES), directory);
        if (!file.mkdirs()) {
            Log.e(LOG_TAG, "Directory not created");
        }
        return file;
    }
    

    一旦你有了包含目录的文件对象,你就可以实际保存:

    private void saveToFile(File directory, String toWrite) {
        File file = new File(dir, "myData.txt");
        try {
            FileOutputStream f = new FileOutputStream(file);
            PrintWriter pw = new PrintWriter(f);
            pw.print(toWrite);
            pw.flush();
            pw.close();
            f.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }   
    }
    

    或者,您可以直接保存图像:

    private void saveImage(Bitmap finalBitmap, File dir, String fileName) {
        File file = new File (dir, fileName);
        if (file.exists ()) file.delete (); 
        try {
               FileOutputStream out = new FileOutputStream(file);
               finalBitmap.compress(Bitmap.CompressFormat.JPEG, 90, out);
               out.flush();
               out.close();
    
        } catch (Exception e) {
               e.printStackTrace();
        }
    }
    

    希望这会有所帮助!

    参考:
    http://developer.android.com/training/basics/data-storage/files.html
    Write a file in external storage in Android
    Android saving file to external storage

    【讨论】:

    • 谢谢,但你能告诉我我应该把你的代码放在哪里吗?请看一下我的代码,然后建议我应该在哪里编辑
    • 对不起,刚刚改了这个,一定是复制了错误的权限。 “但是,如果您的应用程序使用 WRITE_EXTERNAL_STORAGE 权限,那么它也隐含地拥有读取外部存储的权限。”参考:developer.android.com/training/basics/data-storage/… 不错的收获!
    • return (Environment.MEDIA_MOUNTED.equals(state) || Environment.MEDIA_MOUNTED_READ_ONLY.equals(state));
    • 至于如何实现,这些都是可以随时调用的函数。在您的情况下,当用户点击按钮时。只需确保以正确的顺序调用它们(检查 SD 可用性,创建目录并最后保存文件)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-11-23
    • 1970-01-01
    • 1970-01-01
    • 2015-03-05
    • 1970-01-01
    • 1970-01-01
    • 2022-08-10
    相关资源
    最近更新 更多