Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/228.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么listOfFiles是空的?_Java_Android - Fatal编程技术网

Java 为什么listOfFiles是空的?

Java 为什么listOfFiles是空的?,java,android,Java,Android,Android说,如果列表为空,那么我做错了什么? 我尝试将getPath更改为GetAboletPath,但都是一样的。 我尝试访问/storage/(而SD_路径是/storage/emulated/0),我得到了一个包含两个文件夹的列表:emulated和self,这两个文件夹都不可访问 public class MainActivity extends AppCompatActivity { private static final String SD_PATH = Envir

Android说,如果列表为空,那么我做错了什么? 我尝试将getPath更改为GetAboletPath,但都是一样的。 我尝试访问/storage/(而SD_路径是/storage/emulated/0),我得到了一个包含两个文件夹的列表:emulated和self,这两个文件夹都不可访问

public class MainActivity extends AppCompatActivity {

    private static final String SD_PATH = Environment.getExternalStorageDirectory().getPath();

    ...

File home = new File(SD_PATH);
        File[] listOfFiles = home.listFiles();
        if(listOfFiles != null && listOfFiles.length > 0){
            for (File file : home.listFiles()){
                songs.add(file.getName());
            }
        }
以下是我的AndroidManifest.xml:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.unimusic">

    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

同样的事情过去也曾让我感到痛苦

引用文件

从Android 6.0(API级别23)开始,用户在应用程序运行时授予应用程序权限,而不是在安装应用程序时

(见附件)

从文件系统读取是现在必须在运行时请求的权限之一,以便使用。只有当您以SDK 23或更高版本为目标时,这才是一个问题。那么如何修复:

这些文档显示了一个我为您的用例修改的示例(请参阅原文)(我没有运行此代码,但它应该是一个很好的起点)。您可能希望在
onCreate()
中为需要权限的活动请求权限(在您的示例中是
main活动


同样的事情在过去也让我很难受

引用文件

从Android 6.0(API级别23)开始,用户在应用程序运行时授予应用程序权限,而不是在安装应用程序时

(见附件)

从文件系统读取是现在必须在运行时请求的权限之一,以便使用。只有当您以SDK 23或更高版本为目标时,这才是一个问题。那么如何修复:

这些文档显示了一个我为您的用例修改的示例(请参阅原文)(我没有运行此代码,但它应该是一个很好的起点)。您可能希望在
onCreate()
中为需要权限的活动请求权限(在您的示例中是
main活动


您的目标API版本是什么?minSdk是15,target sdk是23尝试将target sdk更改为22。如果这行得通,那么我会写一个答案,描述为什么以及如何修复它。@curobty,它行得通。但是为什么呢?总是查看日志以了解相关信息。每个访问失败和/或权限失败都有明确的说明。您的目标API版本是什么?minSdk是15,target sdk是23尝试将target sdk更改为22。如果这行得通,那么我会写一个答案,描述为什么以及如何修复它。@curobty,它行得通。但是为什么呢?总是查看日志以了解相关信息。每个访问失败和/或权限失败都有明确的说明。它起作用了,但现在我在requestPermissions中出现了一个新错误。应用程序只是因为一个错误包而崩溃安装程序崩溃了(smth像这样,有一些翻译错误,因为我使用的是俄语)好的,sry,我的错。我认为,如果我请求权限,则不需要将其预先添加到AndroidManifest.xml中:DIt工作正常,但现在我在requestPermissions中遇到了一个新错误。应用程序只是因为一个错误包而崩溃安装程序崩溃了(smth像这样,有一些翻译错误,因为我使用的是俄语)好的,sry,我的错。我认为,如果我请求许可,则不需要将其预先添加到AndroidManifest.xml:D中
// Ask for the read external storage permission
if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED)
{
    // Should we show an explanation?
    if (ActivityCompat.shouldShowRequestPermissionRationale(this,
                Manifest.permission.READ_EXTERNAL_STORAGE))
    {
        // Provide an additional rationale to the user if the permission was not granted
        // and the user would benefit from additional context for the use of the permission.
        // Display a SnackBar with a button to request the missing permission.
        Snackbar.make(layout,
                    "External storage is needed in order to {YOUR EXPLANATION HERE}",
                    Snackbar.LENGTH_INDEFINITE).setAction("OK", new View.OnClickListener()
            {
                @Override
                public void onClick(View view)
                {
                    // Request the permission
                    ActivityCompat.requestPermissions(MainActivity.this,
                            new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, 0);
                }
            }).show();
        }
        else
        {
            // No explanation needed, we can request the permission.
            ActivityCompat.requestPermissions(this,
                    new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, 0);
        }
}