我在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) 我一直在努力研究如何在 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 手机上创建一个文本文件并在其中写入一些文本。
当我点击按钮时,它说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
我已经尝试过这段代码。但无法再获取缩略图。还尝试了不同的方法来获取缩略图。我应该为 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) 更新:
为了保存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) 在我的应用程序中,我使用下面的代码列出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)