标签: android-sdcard

保存到SD卡作为文本文件

   stopWriting = (Button) findViewById(R.id.save);
   stopWriting.setOnClickListener(new OnClickListener() {

       @SuppressLint("SdCardPath")
    public void onClick(View v) {
           // stop recording the sensor data
           try {

               myFile = new File("/sdcard/SensorData/" + txtData.getText() + ".txt");
               myFile.createNewFile();

               sData = new FileOutputStream(myFile);
               myOutWriter = new OutputStreamWriter(sData);
               myBufferedWriter = new BufferedWriter(myOutWriter);
               myPrintWriter = new PrintWriter(myBufferedWriter);

               //if(myFile != null )//stopFlag = mSensorManager.cancelTriggerSensor(null, null);
               Toast.makeText(getBaseContext(), "Done", Toast.LENGTH_SHORT).show();
           } catch (Exception e) {
               Toast.makeText(getBaseContext(), e.getMessage(), Toast.LENGTH_SHORT).show();
           }
       }
   });
Run Code Online (Sandbox Code Playgroud)

我试图将陀螺仪数据保存到txt文件,但它不保存.如果有人发现问题,请帮我纠正.

java android save android-sdcard android-memory

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

获取Android上的所有总空间和可用空间

据我所知,在Android上,有:

  • 应用和缓存的内部存储器
  • 某些手机​​上的内置SD卡(不可拆卸)
  • 用于音乐和照片的外置SD卡(可移动)

我如何获得每个的总数和可用性,并检查它们是否存在(某些手机没有内部SD卡)

谢谢

environment android sd-card android-sdcard

12
推荐指数
1
解决办法
9303
查看次数

SD卡上的SQLite数据库

我想在SD卡上创建一个sqlite数据库(不想用尽用户的内部存储).我熟悉OpenHelper模式:

public DatabaseFoo(Context context) {
    OpenHelper openHelper = new OpenHelper(context);
    mDb = openHelper.getWritableDatabase();
}

private static class OpenHelper extends SQLiteOpenHelper {
    public OpenHelper(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }

    ...
Run Code Online (Sandbox Code Playgroud)

所以,如果我们想在SD卡上创建,我认为我们必须使用:

public static SQLiteDatabase openOrCreateDatabase (String path, 
      SQLiteDatabase.CursorFactory factory);
Run Code Online (Sandbox Code Playgroud)

但是什么是"工厂"的说法,应该使用什么工厂?

还有点担心如果用户在我的应用程序正在使用时删除SD卡会发生什么.

谢谢

sqlite android android-sdcard

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

Android:从SD卡中删除图像

我需要从用户选择的SD卡中删除图像.在我的活动中,在用户从图库中选择图像后,我执行以下代码:

public void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (resultCode == RESULT_OK) {
        if (requestCode == SELECT_PICTURE) {
            Utils.imgUri = data.getData();
            Utils.imgPath = getPath(Utils.imgUri);
            File file = new File(Utils.imgPath);
            boolean deleted = file.delete();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

其中getPath方法是:

public String getPath(Uri uri) {
    String[] projection = { MediaStore.Images.Media.DATA };
    Cursor cursor = managedQuery(uri, projection, null, null, null);
    if(cursor!=null){
        int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
        cursor.moveToFirst();
        return cursor.getString(column_index);
    }
    else return null;
}
Run Code Online (Sandbox Code Playgroud)

图像被正确删除,但在图库中仍然保留已删除图像的预览.当我点击它时,加载了一个黑色图像..

那么,在从我的应用代码中删除一些图像后,如何更新图库预览?

android android-sdcard

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

Android - 安装在SD卡上的应用程序时的内部存储与外部存储

我有一个下载大量内容的应用程序(它在用户之间有所不同,但可能是200mb到1GB或更多).

目前,我将所有这些内容保存在外部存储上,因为这可能是空间最大的区域,例如SD卡.这在大多数情况下都可以正常工作,但是这种情况不一定是理想的.

如果设备具有内置的外部存储设备(如大多数平板电脑),但也有SD卡插槽,则外部存储问题会变得有点复杂.该应用程序可以安装到SD卡上,但内容将保存在内置存储中,而不是外部SD卡中.

如果应用程序安装在SD卡上,是否会getFilesDir()在SD卡或内部存储器上给出路径?

处理这个问题的最佳方法是什么?我应该将内容保存到内部存储(在SD卡上),外部存储器还是在启动应用程序时询问用户最好的想法?

android android-sdcard

12
推荐指数
1
解决办法
7396
查看次数

观察Audio.Media.EXTERNAL_CONTENT_URI的Android内容观察者的更改

我正在开发一个Android应用程序,我必须检测Android SD卡中音频文件的变化,文件名,文件路径和执行的操作.例如,如果我在SD卡中添加文件,那么我想知道

  1. 添加的文件的名称
  2. 文件的路径
  3. 操作 - 添加

以前我已经尝试过文件观察器但是为此我必须在每个目录上应用它.所以我搜索了一些其他解决方案,并获得了有关Audio.Media.EXTERNAL_CONTENT_URI的信息.然后我创建了一个像这样的内容观察者

UriObserver.java - 一个内容观察者

class UriObserver extends ContentObserver {

    public UriObserver(Handler handler) {
        super(handler);
        // TODO Auto-generated constructor stub
    }

    @Override
    public void onChange(boolean selfChange) {
        // TODO Auto-generated method stub
        super.onChange(selfChange);

        Log.d("INSTANT", "GETTING CHANGES");
    }

}
Run Code Online (Sandbox Code Playgroud)

这是注册的代码

UriObserver observer = new UriObserver(new Handler());

Log.d("INSTANT", "registered content observer");

this.getApplicationContext()
    .getContentResolver()
    .registerContentObserver(
    MediaStore.Images.Media.EXTERNAL_CONTENT_URI, false,
    observer);

Log.d("INSTANT", "registered content observer");
Run Code Online (Sandbox Code Playgroud)

它让我知道在与音频文件相关的SD卡中发生了一些变化.但它没有提供有关添加,编辑或删除哪个文件的任何信息.

然后我搜索了解决方案并得到了这篇文章

Android:如何通过MTP连接时检测MediaStore中的更改

在这篇文章中,Bhiefer给出了一些代码作为答案,我认为它可以起作用,所以我试图实现它,但我无法这样做.

我能为此做些什么?

更新

我可以查询Audio.Media.EXTERNAL_CONTENT_URI的最新更改吗?这段代码:

mCursor = context.getContentResolver().query(
                    Audio.Media.EXTERNAL_CONTENT_URI, …
Run Code Online (Sandbox Code Playgroud)

android android-sdcard android-mediascanner contentobserver fileobserver

12
推荐指数
1
解决办法
8375
查看次数

Android:FileObserver仅监控顶级目录

根据文件,

"Each FileObserver instance monitors a single file or directory. If a directory is monitored, 
events will be triggered for all files and subdirectories inside the monitored directory."
Run Code Online (Sandbox Code Playgroud)

我的代码就像,

    FileObserver fobsv = new FileObserver("/mnt/sdcard/") {

    @Override
    public void onEvent(int event, String path) {
        System.out.println(event+"    "+path);
    }
    };
    fobsv.startWatching();
Run Code Online (Sandbox Code Playgroud)

但是,onEvent()只有在/ mnt/sdcard /中更改文件时才会触发.如果我在/ mnt/sdcard/downloads /中创建一个文件,则该方法不会被触发.

代码有问题吗?

android android-sdcard fileobserver

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

警告:忽略File.mkdir()

我使用Media Recorder API创建了一个基本的录音应用程序.我正在尝试在SD卡中创建一个文件夹,并将我录制的文件保存到该文件夹​​中.我收到以下代码的警告.

File.mkdir()被忽略

    // Assign random number to avoid audio file from overwriting
    Long tsLong = System.currentTimeMillis()/1000;

    // Specify a Location for the recorded file to be stored in the SD card
    mFileName = Environment.getExternalStorageDirectory().getAbsolutePath() + "/AudioRecordTest/";
    File path = new File(mFileName);
    if(!path.exists()) {
        path.mkdir();
    }
    mFileName += "/AudioRecordTest_" + tsLong.toString() + ".mp3";
Run Code Online (Sandbox Code Playgroud)

如何解决此警告消息.如果有任何其他错误,请随意修改代码.

android sd-card audio-recording android-sdcard

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

强制访问外部可移动microSD卡

我正在使用三星A3,Android 5.0.2.我正在使用此设置来编译应用程序,即Android 4.1 Jelly Bean(API 16)目标.

我确切地知道了外部可移动microSD卡的路径/mnt/extSdCard/(参见下面的注释#7).

问题:我注意到了

File myDir = new File("/mnt/extSdCard/test");
myDir.mkdirs();
Run Code Online (Sandbox Code Playgroud)

不起作用:没有创建目录.

也:

File file = new File("/mnt/extSdCard/books/test.txt");   // the folder "books" already exists on the external microSD card, has been created from computer with USB connection
FileOutputStream fos = new FileOutputStream(file);
Run Code Online (Sandbox Code Playgroud)

产生此错误:

java.io.FileNotFoundException:/mnt/extSdCard/books/test.txt:open failed:libcore.io.IoBridge.open中的EACCES(权限被拒绝)(...

如何强制读取+写入外部可移动microSD卡?

笔记:

  1. Environment.getExternalStorageDirectory().toString()给出了/storage/emulated/0我的手机内部存储,即不是我想要的.

  2. getExternalFilesDir(null)给出/storage/emulated/0/Android/data/com.blahblah.appname/files/即不是我想要的东西.请注意,我不能getExternalFilesDirs在决赛中使用,s因为这在API16中不可用.此外,API16中也没有运行时权限.

  3. 我已经拥有了<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />,而且READ_EXTERNAL_STORAGE.

  4. 我读了很多喜欢的话题这一个这一个,其实大概20类似的问题,但最后似乎很复杂,一切都和它的相反之说.那是我的我正在寻找特定于这种情况的解决方案.

  5. 我不想ACTION_OPEN_DOCUMENT …

java android android-sdcard android-external-storage

12
推荐指数
1
解决办法
1514
查看次数

无法在Android模拟器中写入SD卡

我在AndroidManifest.xml中添加了这一行:

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

但是,当我运行代码写入SD卡时,我收到此错误:

02-19 13:24:46.760: E/CameraTest(598): /mnt/sdcard/image.jpg: open failed: EACCES (Permission denied)
Run Code Online (Sandbox Code Playgroud)

我该如何解决这个问题?

编辑:我正在使用添加了SDCard的Android模拟器.

编辑2:我知道现在的问题是:我已经调用了函数Environment.getExternalStorageState(),我被"删除"了.任何人都知道如何解决这个问题并建立状态MEDIA_MOUNTED

谢谢!

permissions android android-emulator android-sdcard

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