有没有办法将Android应用程序数据存储在SD卡而不是内部存储器中?我知道如何将应用程序sqlite数据库从内部存储器传输到SDCard,但是如果内部存储器首先变满了怎么办?每个人如何处理这个?
我编写了一个代码来录制音频并将其保存到文件位置下方.
private String getFilename() {
String filepath = Environment.getExternalStorageDirectory().getPath();
File file = new File(filepath, AUDIO_RECORDER_FOLDER);
if (!file.exists()) {
file.mkdirs();
}
return (file.getAbsolutePath() + "/" + System.currentTimeMillis() + file_exts[currentFormat]);
}
Run Code Online (Sandbox Code Playgroud)
在Logcat中,它为我提供了一个文件位置
/storage/emulated/0/AudioRecorder/1436854479696.mp4
我无法在SD卡上找到此文件位置.如何访问该位置?
从Lollipop开始,应用程序可以访问真正的SD卡(在Kitkat上无法访问之后,并且在之前的版本中尚未获得官方支持),正如我在此处所述.
因为看到支持SD卡的Lollipop设备变得非常罕见,并且因为模拟器实际上没有能力(或者它?)来模拟SD卡支持,所以我花了很长时间来测试它.
无论如何,似乎不是使用普通的File类来访问SD卡(一旦获得了它的许可),你需要使用Uris来使用它,使用DocumentFile.
这限制了对正常路径的访问,因为我找不到将Uris转换为路径的方法,反之亦然(加上它非常烦人).这也意味着我不知道如何检查当前的SD卡是否可访问,因此我不知道何时要求用户允许读取/写入(或向他们).
目前,这就是我获取所有SD卡的路径:
/**
* returns a list of all available sd cards paths, or null if not found.
*
* @param includePrimaryExternalStorage set to true if you wish to also include the path of the primary external storage
*/
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
public static List<String> getExternalStoragePaths(final Context context,final boolean includePrimaryExternalStorage)
{
final File primaryExternalStorageDirectory=Environment.getExternalStorageDirectory();
final List<String> result=new ArrayList<>();
final File[] externalCacheDirs=ContextCompat.getExternalCacheDirs(context);
if(externalCacheDirs==null||externalCacheDirs.length==0)
return result;
if(externalCacheDirs.length==1)
{
if(externalCacheDirs[0]==null)
return result;
final String storageState=EnvironmentCompat.getStorageState(externalCacheDirs[0]);
if(!Environment.MEDIA_MOUNTED.equals(storageState))
return …Run Code Online (Sandbox Code Playgroud) 如何将图像保存到从图像URL中检索到的SD卡?
我在Android设备中运行应用程序时发现了一些崩溃,这在模拟器中没有显示.所以我需要将Logcat保存在设备内存或SD卡的文本文件中.你能建议我这样做的好方法吗?
如何从SD卡读取特定文件.我已经通过DDMS在sdcard中推送文件,我试图通过这种方式阅读它,但这给了我一个例外.任何人都可以告诉我如何准确指出该文件?
我的代码就是这个.
String path = Environment.getExternalStorageDirectory().getAbsolutePath();
FileInputStream iStream = new FileInputStream(path);
Run Code Online (Sandbox Code Playgroud) 在我的启动画面中,我想检查手机是否有SD卡.布尔语句位于:
Boolean isSDPresent = android.os.Environment.getExternalStorageState()
.equals(android.os.Environment.MEDIA_MOUNTED );
Run Code Online (Sandbox Code Playgroud)
所以,如果我的手机插槽中有SDCard,这个布尔值将返回true,到目前为止一直很好.当我从设置菜单转到"卸载SDCard"并删除SDCard,然后杀死应用程序并再次启动它时,布尔值也将为真.
如果我启动Astro File Manager后卸载并删除SD卡,我仍然可以访问/mnt/sdcard路径,为什么?
我怎样才能做到这一点?
提前致谢!
编辑
使用以下代码进行测试:
File path = Environment.getExternalStorageDirectory();
String pathS = path.getPath();
Run Code Online (Sandbox Code Playgroud)
当SDCard在插槽中时,pathS包含mnt/sdcard,但当我删除SDCard时pathS仍然是/mnt/sdcard......
是否可以将sdcard中存在的文件夹复制到以编程方式呈现相同SD卡的另一个文件夹?
如果是这样,怎么办?
我的文件res/raw夹里有一些音频文件.出于某些原因,我想将这些文件复制到我的SDCard当我的应用程序启动时.
我怎么能这样做?有人指导我吗?
我正在使用自定义视图,并且我正在使用画布,用户可以在其中绘制任何内容,之后我想将该图像保存在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 ×10
android-sdcard ×10
android-file ×2
file ×2
canvas ×1
copy ×1
directory ×1
documentfile ×1
download ×1
eclipse ×1
file-copying ×1
image ×1
java ×1
logcat ×1
mediastore ×1
uri ×1