我无法以编程方式获取Android外部SD卡中的文件

时间:2017-01-27 08:58:38

标签: android file

当我尝试以下代码时:

File home = new File(Environment.getExternalStorageDirectory().getAbsolutePath());

File [] f = home.listFiles();

我无法获取SD卡中的文件,任何人都可以解释原因吗? 并且外部目录的路径是/storage/emulated/0/

谢谢

2 个答案:

答案 0 :(得分:0)

我认为您正在使用API​​-24/25的模拟器..

不幸的是,两者都无法访问存储空间。我不知道想要改变的id或它只是一个bug

您可以adb shell ls

检查您是否有权访问您的存储空间

您必须使用API​​-23或更低版本的模拟器才能访问存储空间。

答案 1 :(得分:0)

在清单文件中包含此权限:

<manifest>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    ...
    <application>
        ...
        <activity> 
            ...
        </activity>
    </application>
</manifest> 

对于API 23+,您需要请求读/写权限,即使它们已经在您的清单中。

// Storage Permissions
private static final int REQUEST_EXTERNAL_STORAGE = 1;
private static String[] PERMISSIONS_STORAGE = {
        Manifest.permission.READ_EXTERNAL_STORAGE,
        Manifest.permission.WRITE_EXTERNAL_STORAGE
};

/**
 * Checks if the app has permission to write to device storage
 *
 * If the app does not has permission then the user will be prompted to grant permissions
 *
 * @param activity
 */
public static void verifyStoragePermissions(Activity activity) {
    // Check if we have write permission
    int permission = ActivityCompat.checkSelfPermission(activity, Manifest.permission.WRITE_EXTERNAL_STORAGE);

    if (permission != PackageManager.PERMISSION_GRANTED) {
        // We don't have permission so prompt the user
        ActivityCompat.requestPermissions(
                activity,
                PERMISSIONS_STORAGE,
                REQUEST_EXTERNAL_STORAGE
        );
    }
}

并处理响应,例如:

@Override
public void onRequestPermissionsResult(int requestCode,
        String permissions[], int[] grantResults) {
    switch (requestCode) {
        case MY_PERMISSIONS_REQUEST_READ_CONTACTS: {
            // If request is cancelled, the result arrays are empty.
            if (grantResults.length > 0
                && grantResults[0] == PackageManager.PERMISSION_GRANTED) {

                // permission was granted, yay! Do the
                // contacts-related task you need to do.

            } else {

                // permission denied, boo! Disable the
                // functionality that depends on this permission.
            }
            return;
        }

        // other 'case' lines to check for other
        // permissions this app might request
    }
}

有关申请API 23+权限的官方文档,请查看https://developer.android.com/training/permissions/requesting.html