标签: android-sdcard

当父目录可写时,mkdirs对sd卡上的目录返回false

当我启动我的Android应用程序时,我需要在SD卡上创建一个目录,对于少数用户而言这是失败的,我无法弄清楚它的原因......

(我发现WRITE_EXTERNAL_STORAGE权限丢失导致类似的问题,它就在那里,它适用于几乎所有用户,所以我认为这不是原因)

我已经简化了以前的情况,以便更容易解释,如果创建一个directoy失败,我运行一个测试用例,我尝试在sdcard上创建一个.test目录:

new File(Environment.getExternalStorageDirectory(), ".test").mkdir() -> false
new File(Environment.getExternalStorageDirectory(), ".test").mkdirs() -> false
Run Code Online (Sandbox Code Playgroud)

相关目录的文件属性:

/sdcard/.test(exists = false canWrite = false canRead = false canExecute = err isDirectory = false isFile = false)

/ sdcard(exists = true canWrite = true canRead = true canExecute = err isDirectory = true isFile = false)

/(exists = true canWrite = false canRead = true canExecute = err isDirectory = true isFile = false)

getExternalStorageState =装

(canExecute返回错误,因为测试是在sdk <9上运行的)

建议和想法非常受欢迎......

android mkdir android-sdcard

19
推荐指数
3
解决办法
2万
查看次数

将原始文件复制到SDCard?

我的文件res/raw夹里有一些音频文件.出于某些原因,我想将这些文件复制到我的SDCard当我的应用程序启动时.

我怎么能这样做?有人指导我吗?

android file-copying android-sdcard

19
推荐指数
2
解决办法
2万
查看次数

尝试保存图像时,MediaStore.Images.Media.insertImage返回null

我正在使用自定义视图,并且我正在使用画布,用户可以在其中绘制任何内容,之后我想将该图像保存在SD卡中,但是无法做到这一点.不知道发生了什么.

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(){
                private FileOutputStream fOut;

                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, …
Run Code Online (Sandbox Code Playgroud)

android canvas mediastore android-sdcard

19
推荐指数
2
解决办法
1万
查看次数

如果Android目录尚不存在,如何自动创建

我正在使用教程创建一个图库应用程序,但收到以下错误:

abc目录路径无效!请设置图像目录名AppConstant.java类

请访问以下链接以查看整个教程的代码,因为我使用相同的代码:

http://www.androidhive.info/2013/09/android-fullscreen-image-slider-with-swipe-and-pinch-zoom-gestures/

我在UtilsClass中找到了这段代码:

else {//图像目录为空Toast.makeText(_context,AppConstant.PHOTO_ALBUM +"为空.请加载一些图像!",Toast.LENGTH_LONG).show(); }

    } else {
        AlertDialog.Builder alert = new AlertDialog.Builder(_context);
        alert.setTitle("Error!");
        alert.setMessage(AppConstant.PHOTO_ALBUM
                + " directory path is not valid! Please set the image directory name AppConstant.java class");
        alert.setPositiveButton("OK", null);
        alert.show();
    }

    return filePaths;
Run Code Online (Sandbox Code Playgroud)

如何以编程方式创建缺少的目录而不是显示此错误对话框?

android android-sdcard

19
推荐指数
1
解决办法
3万
查看次数

如何获取android中的内部和外部sdcard路径

大多数新的Android设备都有内部SD卡和外部SD卡.我想制作一个文件浏览器应用程序,但我无法找到如何获取在我的应用程序中使用的路径,因为

File file = Environment.getExternalStorageDirectory();
Run Code Online (Sandbox Code Playgroud)

只是在大多数设备中返回,/mnt/sdcard 但是另一个外部SD卡的路径就像/storage1 or /storage2 .任何帮助赞赏.

android file android-sdcard android-file

18
推荐指数
2
解决办法
6万
查看次数

Android SD卡写入,权限被拒绝

我正在尝试使用以下代码将文件写入SDCard(android.permission.WRITE_EXTERNAL_STORAGE已在manifest.xml中设置权限).执行nmea_file.createNewFile();它时抛出异常Permission Denied.

任何猜测为什么会发生这种情况?

if(!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) 
  {
     Log.d(TAG, "Sdcard was not mounted !!" ); 
  }
else
  {
    File nmea_file; 
    File root = Environment.getExternalStorageDirectory();
    FileWriter nmea_writer = null;
    try {
        nmea_file = new File(root,"NMEA.txt");
        if(!nmea_file.exists()) {
                Log.w(TAG, "File Doesn't Exists!");
                nmea_file.createNewFile();
            }
        nmea_writer = new FileWriter(nmea_file);
        nmea_writer.append(nmea);
        nmea_writer.flush();
    }
    catch (IOException e) 
    {
        Log.w(TAG, "Unable to write", e);
    } 
    finally 
    {
        if (nmea_writer != null) 
        {
            try 
            {
                nmea_writer.close();
            } 
            catch (IOException e) 
            {
                Log.w(TAG, "Exception closing …
Run Code Online (Sandbox Code Playgroud)

android android-sdcard

17
推荐指数
3
解决办法
6万
查看次数

如何判断SD卡是否已安装在Android中?

我正在开发一个Android应用程序,需要查看用户存储的图像.问题是如果用户通过USB线安装了SD卡,我就无法读取磁盘上的图像列表.

有没有人知道如何判断usb是否已安装,以便我可以弹出一条消息通知用户它不起作用?

android android-sdcard

16
推荐指数
2
解决办法
3万
查看次数

如何隐藏Android画廊中的图像

我当前项目的一部分是从URL下载图像然后保存到SDCard.但问题是所有在sdcard中保存的图像都显示在android gallery页面中.我想要的是" 我不想在Android画廊中保存所有已保存的图像. "

android android-sdcard android-gallery

16
推荐指数
2
解决办法
1万
查看次数

Android - 将图像保存在特定文件夹中

我需要将使用我的应用程序拍摄的照片保存在特定文件夹中.我已经阅读了很多这个问题的解决方案,但我无法使它们中的任何一个工作,所以我寻求帮助.

MainActivity.java

public void onClick(View v) {

    Intent camera = new Intent(
            android.provider.MediaStore.ACTION_IMAGE_CAPTURE);

    //Folder is already created
    String dirName = Environment.getExternalStorageDirectory().getPath()
            + "/MyAppFolder/MyApp" + n + ".png";

    Uri uriSavedImage = Uri.fromFile(new File(dirName));
    camera.putExtra(MediaStore.EXTRA_OUTPUT, uriSavedImage);
    startActivityForResult(camera, 1);

    n++;
}
Run Code Online (Sandbox Code Playgroud)

AndroidManifest.xml中

<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
Run Code Online (Sandbox Code Playgroud)

android android-sdcard android-gallery android-camera-intent

16
推荐指数
3
解决办法
8万
查看次数

SD卡上的Android KitKat 4.4文件夹

我们刚刚违反了适用于在Android 4.4上将文件写入SD卡(外部存储)的新权限(EACCES权限被拒绝)

在KitKat之前,我们设置了可写文件夹,如下所示:

mfolder = Environment.getExternalStorageDirectory().getPath() + "/appfiles";
Run Code Online (Sandbox Code Playgroud)

然而,经过几个小时的搜索,我得出结论,无论是对还是错,在4.4设备上启用文件写入需要将其更改为:

mfolder = Environment.getExternalStorageDirectory().getPath() + "/Android/data/com.xyz.abc/appfiles";
Run Code Online (Sandbox Code Playgroud)

所以mfolder会是这样的:/mnt/sdcard/Android/data/com.xyz.abc/appfiles

这是正确的,我们是否在sdcard上创建了一个像上面那样的文件夹来启用4.4设备来写文件?

mfolder是我们保存为共享首选项的String.

然后,如果API> = 19,我们将运行此代码,该代码将更改mfolder String,然后将旧文件夹中的所有文件复制到新的"kitkat"文件夹.

if (android.os.Build.VERSION.SDK_INT>=19){
        if (!mfolder.contains("/Android/data/com.xyz.abc/appfiles")){
            if (prefs.getBoolean("kitkatcheck", false)==false){

                //update mfolder from
                      // /mnt/sdcard/appfiles
                      // to
                      // /mnt/sdcard/Android/data/com.xyz.abc/appfiles
                String prekitkatfolder = mfolder;
                String kitkatfolder = mfolder.replace("/appfiles", "/Android/data/com.xyz.abc/appfiles");
                mfolder = kitkatfolder;
                try {
                    File sd = new File(mfolder);
                    if(!sd.exists() || !sd.isDirectory()) {
                        sd.mkdirs();
                    }
                } catch (Exception e) {
                    Toast.makeText(getBaseContext(), "Error creating Kitkat folder!\n" + e.toString(), Toast.LENGTH_LONG).show();
                    return;
                }
                prefEditor.putString("patternfolder", mfolder);
                prefEditor.putBoolean("kitkatcheck", …
Run Code Online (Sandbox Code Playgroud)

android android-sdcard android-4.4-kitkat

16
推荐指数
2
解决办法
1万
查看次数