我正在尝试将文件从任何位置(包括内部设备存储)移动到 SD 卡,
为此我有
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
Run Code Online (Sandbox Code Playgroud)
在我的清单中,并通过检查是否使用以下方法授予权限来检查它是否有效:
Contex.checkCallingOrSelfPermission("android.permission.WRITE_EXTERNAL_STORAGE") 和 Contex.checkCallingOrSelfPermission("android.permission.READ_EXTERNAL_STORAGE")
我尝试了 3 种不同的方法来做到这一点:
这种方法:
public static void move(File src, File dst) throws IOException {
FileInputStream inStream = new FileInputStream(src);
FileOutputStream outStream = new FileOutputStream(dst);
FileChannel inChannel = inStream.getChannel();
FileChannel outChannel = outStream.getChannel();
inChannel.transferTo(0, inChannel.size(), outChannel);
inStream.close();
outStream.close();
}
Run Code Online (Sandbox Code Playgroud)original.renameTo(newPath1);
我阅读了很多关于此的 SO 帖子,我尝试过的所有解决方案都不起作用,我确保安装了 SD 卡,并且在尝试时我没有将我的设备连接到 PC。我什至尝试了 2 种不同的带有 SD 卡的设备。请注意,我可以使用 BitmapFactory.decode() 以完全相同的路径访问图像,并且可以将该图像加载到 imageview。
我总是收到 EACCES(权限被拒绝)。我不知道还能做什么来解决这个问题:(
11-13 11:11:54.358 19192-19372/xaday.ofek.ron.xaday W/System.err: java.io.FileNotFoundException: /storage/sdcard1/DCIM/thai2/IMG-20150702-WA0001.jpg: open …Run Code Online (Sandbox Code Playgroud) 我正在构建一个自定义 Marshmallow Android 版本,我想在第一次启动时向 SD 卡添加一些文件- 具体来说,我希望在创建 DCIM、下载、铃声等的同时创建它们。
默认文件夹结构是何时创建的?
android android-source android-sdcard android-6.0-marshmallow
我创建了一个应用程序来扫描手机上的音乐文件。如果我扫描文件夹/sdcard/Music,它会扫描音乐文件,但在我写入/sdcard时它不会扫描 mp3 文件。它工作正常。但它在某些设备上不起作用,应用程序崩溃可能是因为该手机上不存在该路径我该怎么办?
代码
public class SongsManager {
// SDCard Path
String MEDIA_PATH = new String("/sdcard/Music");
private ArrayList<HashMap<String, String>> songsList = new ArrayList<HashMap<String, String>>();
// Constructor
public SongsManager() {
}
/**
* Function to read all mp3 files from sdcard
* and store the details in ArrayList
*/ public ArrayList<HashMap<String, String>> getPlayList(){
File home = new File(MEDIA_PATH);
if (home.listFiles(new FileExtensionFilter()).length > 0) {
for (File file : home.listFiles(new FileExtensionFilter())) {
HashMap<String, String> song = new HashMap<String, …Run Code Online (Sandbox Code Playgroud) 我正在构建一个Camera应用程序并在拍照后(在写入PictureCallback中的文件之后),我想更新设备上的媒体文件,因此我使用MediaScannerConnection(如下面的代码所示).但是,我无法在设备上的图库应用程序中查看图像.但是我可以在PC上查看图像(图像在SD卡上).我错过了什么吗?
MediaScannerConnection.scanFile(this,
new String[] {pictureFile.toString()}, null,
new MediaScannerConnection.OnScanCompletedListener() {
public void onScanCompleted(String path, Uri uri) {
Log.d("ExternalStorage", "Scanned " + path + ":");
Log.d("ExternalStorage", "-> uri=" + uri);
}
});
如果我在ASUS Transformer上运行以下代码,那么'testfile.txt'将按照预期在'sd card'目录的顶层创建.
private void testWriteFile () throws IOException
{
File sdCard = Environment.getExternalStorageDirectory();
File file = new File(sdCard, "testfile.txt");
FileOutputStream myOutput = new FileOutputStream(file);
byte buffer[] = {'0','1','2','3','4','5','6','7','8','9'};
myOutput.write(buffer,0,buffer.length);
myOutput.flush();
myOutput.close();
}
Run Code Online (Sandbox Code Playgroud)
我可以使用文件管理器应用程序在ASUS Transformer上查看该文件.我可以通过'adb shell'命令从Windows dos框中看到该文件,并且其权限似乎已正确设置.但是,如果我从Windows资源管理器中查看该目录,则"testfile.txt"不存在.我已经设置了显示隐藏文件和系统文件的选项,但没有运气.
如果我使用ASUS文件管理器应用程序更改"testfile.txt"的名称,则它在Windows资源管理器中可见,因此其他应用程序可以在资源管理器中显示文件.
如果我在ZTE Blade(Orange San Francisco)上运行相同的代码,那么我可以在Windows资源管理器中看到'testfile.txt'而无需更改其名称.
还有什么我需要做的来完成这个文件,以便它变得可见吗?
这里报告了一个类似的问题,除非我"强制关闭"应用程序,否则无法在sd-card上看到由Android应用程序编写的Windows中的文件,但在我的情况下强制关闭并不会使文件可见.
如何验证Sdcard是否可用?我的应用程序是保存一些语音到SD卡.如果没有存储卡意味着,我的应用程序将强行关闭.我不知道那段时间我能做些什么.有谁可以请,我如何在将数据保存到存储卡之前验证这一点.
更新
我已经找到了上面的这个,并得到了SO用户的好答案.现在,我想查看存储卡大小是否已满?我怎么能这样做?任何人指导我.
提前致谢.
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />"/sdcard/filename".我猜Nexus没有外部SD支持但S2有,我认为这可能会导致路径出现问题.我该如何优雅地处理这样的案件?
清单有
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE">
Run Code Online (Sandbox Code Playgroud)
应用程序设置,“存储”=修改/删除 SD 卡内容”在运行 2.3.5 的三星平板电脑和运行 2.3.4 的摩托罗拉 Droid 上结果相同。设备不依赖于开发机器。
代码如下:
public class OutputStudentRecords extends StActivity{
SharedPreferences mStudentSettings;
protected Cursor mCursor;
boolean mExternalStorageAvailable = false;
boolean mExternalStorageWriteable = false;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.create_csv);
String state = Environment.getExternalStorageState();
Toast.makeText(getApplicationContext(),"State is " + state, Toast.LENGTH_LONG).show();
if (!Environment.MEDIA_MOUNTED.equals(state)){
//We can read and write the media
mExternalStorageAvailable = mExternalStorageWriteable = true;
Toast.makeText(getApplicationContext(), "We Can Read And Write ", Toast.LENGTH_LONG).show();
File file = new File(Environment.getExternalStorageDirectory()
+File.separator
+"studentrecords"); //folder name
file.mkdir(); …Run Code Online (Sandbox Code Playgroud) 我想编辑存储在SD卡上的.txt文件.在我的应用程序中,我必须编写用户活动数据.
因此,每当用户打开应用程序并执行某些操作时,都应使用新数据更新.txt文件.
我已经找到了如何使用以下任一答案获取所有存储:使用 proc/mounts和使用 mount 命令,但现在我想在返回的路径上命名。我对内部存储没有问题,但是这些方法无法区分 SD 卡和 U 盘。如果它看到连接了两个驱动器,我如何确定哪个是 SD 卡,哪个是 USB,或者它们是两个 SD 卡?还是两个U盘?
我绝望地在我的代码中寻找错误,并且非常感谢sb可以帮助我.我正在尝试将图像保存到我的三星Galaxy Tab s2的SD卡中,但无论我使用什么代码,我似乎都无法对SD卡进行任何更改.
下面的代码段落表明,尽管清单发生了变化,但我无权在SD卡上写入数据.
是否有人有同样的问题或知道这里发生了什么?
(android:minSdkVersion ="19"; android:targetSdkVersion ="25")
码:
File filepath = Environment.getExternalStorageDirectory();
File dir = new File(filepath.getAbsolutePath() + "/SaveImage");
MediaStore.Images.Media.insertImage(getContentResolver(), bmp ,"Image.jpg", "IMAGE");
Run Code Online (Sandbox Code Playgroud)
表现:
<manifest
xmlns:android="http://schemas.android.com/apk/res/android"
package="com.ma.singhalja.saveimage">
<uses-permission android:name="android.permission.MEDIA_CONTENT_CONTROL"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<application
Run Code Online (Sandbox Code Playgroud)
日志:
03-28 01:16:54.647 14292-14292/com.ma.singhalja.saveimage E/MediaStore: Failed to insert image
java.lang.SecurityException: Permission Denial: writing com.android.providers.media.MediaProvider uri content://media/external/images/media from pid=14292, uid=10141 requires android.permission.WRITE_EXTERNAL_STORAGE, or grantUriPermission()
at android.os.Parcel.readException(Parcel.java:1620)
Run Code Online (Sandbox Code Playgroud) 我在sdcard上有几个xml文件.如何解析每个xml文件并将接收到的数据插入数据库?
我收到文件夹中的文件名但不知道接下来会做什么和怎么做?
File sdPath = Environment.getExternalStorageDirectory();
File sdPathDr = new File(sdPath.getAbsolutePath() + "/" + "Android/data/" + getPackageName() + "/" + DIR_SD);
File[] files = sdPathDr.listFiles();
Run Code Online (Sandbox Code Playgroud)
如果可以请写代码样本.
xml文件的示例
<row name="Rutracker">
<col name="title_enter"> Rutracker </col>
<col name="login_enter"> bmF6MsdghDEzvcgdghd </col>
<col name="password_enter"> MXFhsejJ3c3g=sdfsdggd </col>
<col name="link_enter"> http://www.rutracker.org </col>
<col name="comment_enter"> </col>
<col name="date_enter"> 15.02.2014 </col>
</row>
Run Code Online (Sandbox Code Playgroud) android ×12
android-sdcard ×12
audio-player ×1
camera ×1
database ×1
file-io ×1
java ×1
manifest ×1
mount ×1
permissions ×1
save-image ×1
usb ×1
windows-7 ×1
xml-parsing ×1