如果您将Android设备连接到PC,您可以浏览文件和目录.可以使用此目录Environment.getExternalStorage().您可以在应用程序中使用它并创建可访问的文件和目录.它工作正常.
在我的设备上这条路径看起来像/storage/emulated/0,如果我尝试adb push这个目录,我将获得访问被拒绝错误.是否可以将文件复制adb到与Windows资源管理器相同的文件夹中?
D:\...\tools>adb push ACCOUNTS.DB /storage/emulated/0
failed to copy 'ACCOUNTS.DB' to '/storage/emulated/0': Permission denied
58969 KB/s (606505 bytes in 0.010s)
Run Code Online (Sandbox Code Playgroud)
我正在实现自动导入/导出,我希望可以访问文件adb shell,万一不会出现任何问题.
目前使用变量$EXTERNAL_STORAGE作为变通方法,它适用于两者adb和应用程序.
设备:华硕Fonepad 7,Android 5.0,尝试了Genymotion Custom Tablet 6.0 - 工作.
我正在尝试实现一些清理工具。由于某些“安全原因”,越来越多的制造商禁止生根设备,禁止不要求解锁。
API 28 之后,此代码将出错:
ActivityCompat.requestPermissions(this, new String[]{
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.WRITE_EXTERNAL_STORAGE
}, 1); // Request permission or not, Will got same result
File rootFolder = Environment.getExternalStorageDirectory(); // That is working fine
rootFolder.listFiles(); // That will return null
Run Code Online (Sandbox Code Playgroud)
当然,我可以使用这个:
android:requestLegacyExternalStorage="true"
Run Code Online (Sandbox Code Playgroud)
但我相信将来会被杀死。
那么,有什么优雅的方式来管理 SDCard 吗?
android android-permissions android-external-storage android-10.0
如何检查SD卡是否已满,以便您的应用程序可以决定是否可以继续执行其工作,即写入外部存储器或通知用户存储空间不足.
我们需要允许用户将文件存储在外部存储中,为此,我们MANAGE_EXTERNAL_STORAGE在应用程序中使用权限。
理想情况下,我们正在使用 Android SDK 版本 30 及以上版本,Permission.manageExternalStorage并使用Permission.storage低于 30 的 Android SDK 版本,如下面的代码所示
// This func is added to access scope storage to export csv files
static Future<bool> externalStoragePermission(BuildContext context) async {
final androidVersion = await DeviceInfoPlugin().androidInfo;
if ((androidVersion.version.sdkInt ?? 0) >= 30) {
return await checkManageStoragePermission(context);
} else {
return await checkStoragePermission(context);
}
}
static Future<bool> checkManageStoragePermission(BuildContext context) async {
return (await Permission.manageExternalStorage.isGranted ||
await Permission.manageExternalStorage.request().isGranted);
}
static Future<bool> checkStoragePermission(BuildContext context,
{String? storageTitle, String? …Run Code Online (Sandbox Code Playgroud) 我对一个奇怪的问题很生气.如果我在我的代码中创建一个文件夹作为
directory_path = Environment.getExternalStorageDirectory()
+ "/" + context.getResources().getString(R.string.app_name);
directory = new File(directory_path);
if (!directory.exists()) {
directory.mkdirs();
}
Run Code Online (Sandbox Code Playgroud)
在/ sdcard /中创建一个新文件夹.如果我尝试在logcat directory_path变量上打印,路径是不同的:/ storage/emulated/0 /如果我去那个路径,我找到了另一个与/ sdcard /上创建的文件夹同名的文件夹.这对我来说是一个问题,因为当我尝试将一些数据写入该文件夹时,everithing进入/ storage/emulated/0中的那个,而另一个(我想要使用的文件夹)保持为空.为什么?
我的应用程序使用DownloadManager将文件下载到设备的Music文件夹的子目录中.
DownloadManager.Request request = new DownloadManager.Request(Uri.parse(url));
...
File file = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MUSIC) + "/MyStuff/song.mp3");
request.setDestinationUri(Uri.fromFile(file));
Run Code Online (Sandbox Code Playgroud)
我注意到当从运行Marshmallow的设备上卸载应用程序时,文件正在被删除(这在旧的OS版本中不会发生).你有什么想法吗?
谢谢
android download-manager android-external-storage android-6.0-marshmallow
我正在使用三星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卡?
笔记:
Environment.getExternalStorageDirectory().toString()给出了/storage/emulated/0我的手机内部存储,即不是我想要的.
getExternalFilesDir(null)给出/storage/emulated/0/Android/data/com.blahblah.appname/files/即不是我想要的东西.请注意,我不能getExternalFilesDirs在决赛中使用,s因为这在API16中不可用.此外,API16中也没有运行时权限.
我已经拥有了<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />,而且READ_EXTERNAL_STORAGE.
我读了很多喜欢的话题这一个或这一个,其实大概20类似的问题,但最后似乎很复杂,一切都和它的相反之说.那是我的我正在寻找特定于这种情况的解决方案.
我不想ACTION_OPEN_DOCUMENT …
我添加了这一行来查找大小(内部和外部)大小,
return availableExternalMemorySize/(1024*1024);
Run Code Online (Sandbox Code Playgroud)
我在平板电脑上测试过.我得到内部和外部SD卡大小,因为,
在内部存储中:
在外部存储中:
但在Tablet中,我看到了设置.外部存储大小为8GB.但是,当我通过编程方式进行测试时,它向我展示了1.7 GB.
查找外部存储大小的步骤是什么?
我正在开发一组需要共享常见状态和配置设置的复杂Android应用程序.
例如,请参阅此图片解释我的方案:

我希望APP 1,APP 2和APP 3能够访问(读/写)公共存储区域的数据.此外,我需要卸载保护,即我不希望在用户卸载任何应用程序时删除数据.
我已经阅读过有关SQLite数据库,ContentProviders和内部和外部存储的文章,但上述每种方法都有如下所列的缺点:
编辑:
我不希望任何依赖Google Play服务,因为我将通过Play商店和第三方下载分发应用程序.
请帮帮我.
sqlite android android-contentprovider android-external-storage
在Android 9(Pie)上的Samsung Galaxy S9和S9 +上,使用Android DownloadManager将文件下载到外部存储失败。
下载适用于具有Android 8的三星设备或具有Android 9(例如Pixel 2)的其他设备
我已将以下权限添加到清单中:
"android.permission.WRITE_EXTERNAL_STORAGE",
"android.permission.READ_EXTERNAL_STORAGE",
"android.permission.INTERNET"
Run Code Online (Sandbox Code Playgroud)
我还已在运行时请求READ / WRITE_EXTERNAL_STORAGE权限。
文件路径是:/storage/4295-DDD5/Android/data/com.example.myapplication/files/filename.file
并且该文件路径
存在,我已经使用AndroidStudio的设备文件资源管理器创建了它
创建下载的方法:
public void downloadFile(String url, String filePath) {
DownloadManager mDownloadManager =
(DownloadManager)context.getSystemService(Context.DOWNLOAD_SERVICE);
DownloadManager.Request request = new
DownloadManager.Request(Uri.parse(url));
request.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_MOBILE |
DownloadManager.Request.NETWORK_WIFI);
request.setVisibleInDownloadsUi(true);
request.setDestinationUri(Uri.parse("file://" + filePath));
mDownloadManager.enqueue(request);
}
Run Code Online (Sandbox Code Playgroud)
预期的结果是将指定文件从url下载到filePath,而不是在日志中出现以下错误:
D/DownloadManager: [8616] Starting com.example.myapplication
W/DownloadManager: [8616] Stop requested with status FILE_ERROR: Failed to generate filename: java.io.IOException: Permission denied
D/DownloadManager: [8616] Finished with status WAITING_TO_RETRY
V/DownloadManager: MIME Type = application/octet-stream
I/DownloadManager: Download 8616 …Run Code Online (Sandbox Code Playgroud) android android-download-manager android-external-storage samsung-galaxy android-9.0-pie