2014-11-20 151 views
0

我现在明白,“外部存储”不一定是SD卡,而是指手机分配给“外部”而不是“内部”的另一个存储区域。保存到外部存储

我的问题现在为我的应用程序创建目录。当我在使用Nexus 5仿真器的Android Studio中进行编译时,我的应用程序崩溃并且错误(在创建日志后)Failed to create directory

我已经添加了权限,仍然有困难。我添加了一个断点正确的代码之前,该目录是由和获得以下信息:

SD卡/存储 图片/应用程序的名字(我用的图片目录)

后,我看到我的logcat这些字符串,它不会创建目录。这里是我使用的代码块:

File mediaStorageDir = new File(Environment.DIRECTORY_PICTURES, "AppName"); 

if (!mediaStorageDir.exists()) { 
    if (!mediaStorageDir.mkdir()) 
     Log.d("AppName", "failed to create directory"); 
    return null; 
} 

任何人都可以引导我朝着正确的方向吗?谢谢!


编辑:

我添加了一个检查外部存储:

public static boolean isExternalStorageWritable() { 
    String state = Environment.getExternalStorageState(); 
    if (Environment.MEDIA_MOUNTED.equals(state) || 
      Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) { 
     return true; 
    } 
    return false; 
} 

,并返回假的!我在输入上面的代码之前运行了这个。有任何想法吗??我添加了权限(写入外部),它仍然不起作用。

回答

0

我使用的是类Save.java,做我的所有图片保存为我,这是一部分,我创建一个目录:

String file_path = Environment.getExternalStorageDirectory().getAbsolutePath()+ NameOfFolder; 
File dir = new File(file_path); 

if(!dir.exists()){ 
    dir.mkdirs(); 
} 

类是临时可用this link

我请致电类如下:

ImageView imageview = (ImageView)findViewById(R.id.LoadingCarImageView); 
    imageview.setDrawingCacheEnabled(true); 
    Bitmap b = imageview.getDrawingCache(); 
    Bitmap bitmap = Bitmap.createBitmap(b); 
    Save savefile = new Save(); 
    savefile.SaveImage(this, bitmap, "stream"); 

告诉我,如果这对你有帮助!

+0

这将是伟大的,如果你不介意!我一直在努力为我的一些问题寻找标准解决方案,但有很多解决方案我不完全理解。 – George 2014-11-20 20:47:07

+0

@George see编辑 – moffeltje 2014-11-20 21:35:06

+0

它做到了!非常感谢你 – George 2014-11-21 14:10:21

0

您正在使用mkdir(),它只创建一个(最后一个)目录。 mkdirs()也会创建任何可能丢失的父目录。

+0

啊我明白了。所以有可能我错过了父目录? – George 2014-11-20 20:43:44

+0

这可能是问题所在。在新设备上,如新创建的Emulator映像,Environment.DIRECTORY_PICTURES的目录可能不存在。 – guido 2014-11-20 20:55:18

+0

我添加了一个测试函数,当我检查是否有外部存储时,它返回false。 :X – George 2014-11-20 21:29:01