安卓系统文件系统中/storage目录下的sdcard路径无法被修改权限
时间: 2024-01-09 16:03:31 浏览: 86
在 Android 系统中,`/storage` 目录下的 `sdcard` 目录是一个符号链接,指向实际的外部存储设备的挂载点,通常为 `/mnt/media_rw/sdcard`。这个符号链接的权限是固定的,无法被修改。
虽然无法修改 `sdcard` 目录的权限,但是我们可以通过修改外部存储设备的挂载点的权限来实现对外部存储设备的权限控制。需要注意的是,修改外部存储设备的权限可能会导致某些应用程序无法正常访问存储设备上的文件。因此,在进行权限修改操作时,需要谨慎操作,并备份好重要的文件。
相关问题
如何通过java获取android系统里面的sdcard/download目录
如果你的设备上有 SD 卡,并且你想要获取 SD 卡中的 Download 目录,可以使用以下代码:
```java
String sdCardPath = System.getenv("SECONDARY_STORAGE");
String downloadPath = sdCardPath + "/Download";
```
在大多数情况下,`SECONDARY_STORAGE` 环境变量将包含 SD 卡的路径。上述代码中,我们使用 `System.getenv("SECONDARY_STORAGE")` 方法获取该变量的值,并将其与 Download 目录名称连接起来,以获取 SD 卡中的 Download 目录路径。
请注意,某些设备可能不会设置 `SECONDARY_STORAGE` 环境变量或将其设置为其他值。因此,此方法可能无法在所有设备上正常工作。此外,如需使用该方法,你需要在 AndroidManifest.xml 文件中添加读写存储的权限。
另外,如果你的应用只需要访问应用自身的 Download 目录,你可以使用 `getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS)` 方法来获取应用的私有 Download 目录,该目录也可以用于存储应用特定的下载文件。例如:
```java
String downloadPath = getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS).getAbsolutePath();
```
此方法返回应用的私有下载目录路径,该目录只能被你的应用访问。请注意,该目录在应用被卸载时会被自动删除。
安卓10中的app如何使用c语言mkdir创建/sdcard/Android/data/com.xxxxx目录
在Android 10中,应用程序需要请求MANAGE_EXTERNAL_STORAGE权限才能创建公共存储目录。同时,由于安全原因,应用程序无法直接访问/sdcard/目录,因此需要使用getExternalFilesDir()方法获取应用程序私有目录的路径。
以下是使用C语言在Android 10中创建/sdcard/Android/data/com.xxxxx目录的步骤:
1. 在AndroidManifest.xml文件中添加以下权限:
```
<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE"/>
```
2. 在应用程序中请求MANAGE_EXTERNAL_STORAGE权限:
```
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.MANAGE_EXTERNAL_STORAGE}, 1);
```
3. 获取应用程序私有目录的路径:
```
char* privateDirPath = NULL;
JNIEnv* env = NULL;
JavaVM* vm = NULL;
jint result = (*vm)->GetEnv(vm, (void**) &env, JNI_VERSION_1_6);
if (result != JNI_OK) {
result = (*vm)->AttachCurrentThread(vm, &env, NULL);
if (result != JNI_OK) {
return NULL;
}
}
jobject context = getCurrentContext(env);
jclass contextClass = (*env)->GetObjectClass(env, context);
jmethodID getExternalFilesDirMethod = (*env)->GetMethodID(env, contextClass, "getExternalFilesDir", "(Ljava/lang/String;)Ljava/io/File;");
jstring type = (*env)->NewStringUTF(env, NULL);
jobject file = (*env)->CallObjectMethod(env, context, getExternalFilesDirMethod, type);
const char* fileStr = (*env)->GetStringUTFChars(env, file, 0);
privateDirPath = strdup(fileStr);
(*env)->ReleaseStringUTFChars(env, file, fileStr);
(*vm)->DetachCurrentThread(vm);
```
4. 使用mkdir()函数创建目录:
```
char* dirPath = "/sdcard/Android/data/com.xxxxx";
strcat(privateDirPath, dirPath);
int result = mkdir(privateDirPath, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH);
if (result == -1) {
// 创建目录失败
}
```
注意:如果应用程序没有MANAGE_EXTERNAL_STORAGE权限,则会在运行时抛出SecurityException异常。