标签: android-external-storage

无法在Android /数据中创建文件夹

我在Android/data文件夹中创建文件夹时遇到问题.我的代码需要创建文件夹,并从其中的asset文件夹中复制文件.这是我的代码:

private File getFileForShare(String filename) {
    try {
        String extStorageDirectory = Environment.getExternalStorageDirectory().toString();
        File folder = new File(extStorageDirectory, "/Android/data/" + context.getPackageName());
        if (!folder.exists()) {
            folder.mkdir();
        }
        AssetManager am = context.getAssets();
        InputStream inputStream = am.open("audio/" + filename);

        File f = new File(folder.getAbsolutePath(), filename);
        OutputStream outputStream = new FileOutputStream(f);
        byte buffer[] = new byte[1024];
        int length = 0;

        while ((length = inputStream.read(buffer)) > 0) {
            outputStream.write(buffer, 0, length);
        }

        outputStream.close();
        inputStream.close();

        return f;
    } catch (IOException e) {
        e.printStackTrace();
    }
    return null;
} …
Run Code Online (Sandbox Code Playgroud)

android android-external-storage

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

Android 5.0+ 新增 SD 卡访问 API DocumentFile.renameTo() UnsupportedOperationException

我一直在努力研究如何在 Lollipop 上重命名 DocumentFile。很抱歉,我曾试图到处搜索解决方案,但似乎缺少有关此新 SD 卡访问 API 的在线信息。

这是我所拥有的:

        String EditText = (Alert_EditText.getText().toString()).trim();
        Uri uri = ListViewObject_List.get(LastItemPos).getImageUri();
        final DocumentFile documentFile = DocumentFile.fromSingleUri(MainClass.this, uri);
        documentFile.renameTo(EditText);
Run Code Online (Sandbox Code Playgroud)

它提出了一个 UnsupportedOperationException:

FATAL EXCEPTION: main
Process: com.camera.test, PID: 3362
java.lang.UnsupportedOperationException
at android.support.v4.provider.SingleDocumentFile.renameTo(SingleDocumentFile.java:105)
at com.camera.test.MainClass$21.onClick(MainClass.java:986)
at android.view.View.performClick(View.java:5242)
at android.widget.TextView.performClick(TextView.java:10530)
at android.view.View$PerformClick.run(View.java:21185)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:145)
at android.app.ActivityThread.main(ActivityThread.java:6872)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1404)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1199)
Run Code Online (Sandbox Code Playgroud)

我也试过这个:

    String EditText = (Alert_EditText.getText().toString()).trim();
    Uri uri = ListViewObject_List.get(LastItemPos).getImageUri();
    File file = new File(uri.getPath());
    final DocumentFile documentFile = DocumentFile.fromFile(file); …
Run Code Online (Sandbox Code Playgroud)

android file-rename android-sdcard android-external-storage

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

无法在内部存储中找到保存到文本文件的数据,如何将文件保存在内部存储 android studio 中?

我想在我的 android 手机上创建一个文本文件并在其中写入一些文本。
当我点击按钮时,它说saved to /data/user/0/com.example.savetotextfile/files/example.txt
但我找不到这些文件夹。
大多数应用程序都在设备存储 > Android > 数据中,但我自己创建的应用程序不在那里。
我错过了许可吗?
我不想写入 SD 卡。

public class MainActivity extends AppCompatActivity {

    private static final String FILE_NAME = "example.txt";

    EditText editText;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        editText = findViewById(R.id.editText);
    }

    public void save(View v) {
        String text = editText.getText().toString();
        FileOutputStream fos = null;

        try {
            fos = openFileOutput(FILE_NAME, MODE_PRIVATE);
            fos.write(text.getBytes());

            editText.getText().clear();
            Toast.makeText(this, "Saved to" + getFilesDir() + "/" + FILE_NAME, Toast.LENGTH_LONG).show();
        } catch (FileNotFoundException e) { …
Run Code Online (Sandbox Code Playgroud)

android text-files android-external-storage android-internal-storage

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

无法从 Android Q 中的 Uri 加载视频缩略图

我已经尝试过这段代码。但无法再获取缩略图。还尝试了不同的方法来获取缩略图。我应该为 android Q 更改什么?

  private void getVideoList(){
            if (Build.VERSION.SDK_INT == Build.VERSION_CODES.Q) {
                String[] projection = new String[]{
                        MediaStore.Video.VideoColumns._ID,
                        MediaStore.Video.VideoColumns.DISPLAY_NAME,
                        MediaStore.Video.VideoColumns.DURATION,
                        MediaStore.Video.VideoColumns.SIZE,enter code here
                        MediaStore.Video.VideoColumns.DATA,`enter code here`
                };
                String selection = MediaStore.Video.Media.DURATION + " <= ?";
                String[] selectionArgs = new String[]{
                        String.valueOf(TimeUnit.MILLISECONDS.convert(30, TimeUnit.SECONDS))
                };

                String sortOrder = MediaStore.Video.Media.DATE_ADDED + " ASC";

                try (Cursor cursor = getApplicationContext().getContentResolver().query(
                        MediaStore.Video.Media.EXTERNAL_CONTENT_URI,
                        projection,
                        selection,
                        selectionArgs,
                        sortOrder
                )) {





                    }
                }

            }
        }
Run Code Online (Sandbox Code Playgroud)

android android-external-storage android-10.0

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

如何使用 JAVA 在 Android 10 及更高版本的媒体商店中保存 pdf 文件?

更新:

为了保存PDF文件:

在下面的答案部分。

为了保存位图文件:

@RequiresApi(api = Build.VERSION_CODES.Q)
@NonNull
private Uri saveBitmap(@NonNull final Context context, @NonNull final Bitmap bitmap,
                       @NonNull final Bitmap.CompressFormat format, @NonNull final String mimeType,
                       @NonNull final String displayName, @Nullable final String subFolder) throws IOException {
    String relativeLocation = Environment.DIRECTORY_PICTURES;

    if (!TextUtils.isEmpty(subFolder)) {
        relativeLocation += File.separator + subFolder;
    }

    final ContentValues contentValues = new ContentValues();
    contentValues.put(MediaStore.MediaColumns.DISPLAY_NAME, displayName);
    contentValues.put(MediaStore.MediaColumns.MIME_TYPE, mimeType);
    contentValues.put(MediaStore.MediaColumns.RELATIVE_PATH, relativeLocation);

    final ContentResolver resolver = context.getContentResolver();

    OutputStream stream = null;
    Uri uri = null;

    try {
        final Uri contentUri …
Run Code Online (Sandbox Code Playgroud)

java pdf mediastore android-external-storage scoped-storage

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

更新到Android 4.4 KitKat后无法找到Movies文件夹

在我的应用程序中,我使用下面的代码列出Movies存储文件夹中的电影.但是自从我将Nexus 7平板电脑升级到Android 4.4后,这段代码无效(代码末尾的吐司弹出意味着代码在该文件夹中找不到任何文件,我甚至不知道它是否可以访问该文件夹).知道我应该更改什么或新更新中的更改内容?

    private void populateSpinners() {

        Boolean foundVideoFiles;

        // videos spinner
        File videoFolder =
                Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MOVIES)
                        .getAbsoluteFile();

        if (videoFolder.listFiles() != null) {
            foundVideoFiles = true; //found some files
            ArrayAdapter<File> movieAdapter = new ArrayAdapter<File>(this,
                    android.R.layout.simple_spinner_dropdown_item, videoFolder.listFiles());
            _spinner_videos.setAdapter(movieAdapter);

            //Restore perviously selected video
            int spinnerValue = _preferences.getInt("spinner_videos", -1);
            if (spinnerValue != -1) {
                _spinner_videos.setSelection(spinnerValue);
            }
        } else {
            foundVideoFiles = false;
        }

        //Error handling
        if (foundVideoFiles == false) {
            Toast.makeText(this, "ERROR: NO MOVIES WERE FOUND IN" + videoFolder, Toast.LENGTH_LONG).show();
        }
} …
Run Code Online (Sandbox Code Playgroud)

java android android-external-storage android-4.4-kitkat

0
推荐指数
1
解决办法
1450
查看次数