【问题标题】:Not able to get files from any Android folder无法从任何 Android 文件夹中获取文件
【发布时间】:2020-07-26 10:33:57
【问题描述】:

我是 android 新手,正在尝试测试一些东西。我有这个简单的应用程序,我只想从任何 android 文件夹中读取文件。到现在为止,我只是检查了我从以下了解到的路径是如何存在的

context.getExternalFilesDir(null);

&

Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM)

得到的路径是这样的

/storage/emulated/0/ then rest of the folders

我已经完成了所有工作,并在清单文件和应用程序中请求了许可。我检查即使授予了权限并且文件夹路径也正确,但 File.listFiles() 给了我空指针异常。

请看下面的代码:

ma​​nfest 文件中的权限

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

获取权限并尝试检查文件的代码

 if(ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED){
        ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},101);
        Toast.makeText(getApplicationContext(),
                "No permission yet",
                Toast.LENGTH_SHORT).show();
    }
    else{
        Toast.makeText(getApplicationContext(),
                "Permission already granted",
                Toast.LENGTH_SHORT).show();
       
        File dcimPath = new File("/storage/emulated/0/bluetooth"); //This path is correct
        
        File[] files = dcimPath.listFiles(); // gives null pointer exception
        Log.i("files length ",files.length+"");
    }

     @Override
     public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    if(requestCode == 101){
        if(grantResults[0] == PackageManager.PERMISSION_GRANTED){
            Toast.makeText(getApplicationContext(),
                    "Permission granted",
                    Toast.LENGTH_SHORT).show();
            File dcimPath = new File("/storage/emulated/0/bluetooth/"); 

            File[] files = dcimPath.listFiles(); //gives error
            Log.i("files length ",files.length+"");
        }
        else{
            Toast.makeText(getApplicationContext(),
                    "Permission denied",
                    Toast.LENGTH_SHORT).show();
        }
    }
}

错误

 Caused by: java.lang.NullPointerException: Attempt to get length of null array

【问题讨论】:

    标签: java android android-studio android-file


    【解决方案1】:

    尝试将此行添加到Android Manifest 文件中

            android:requestLegacyExternalStorage="true"
    

    这用于在应用程序的私有存储之外读取Shared Storage。如果您想了解更多信息,请阅读this...

    希望这会有所帮助。随时要求澄清...

    【讨论】:

    • 哇。有效。但是你能写一些描述,比如为什么会这样吗?这样我也可以接受你的回答。谢谢
    • @TahirHussainMir 很高兴听到这个消息。更新答案...
    • 嗨,我还有一个问题。如果您也知道答案,那么我将在 stackoverflow 上写另一个问题,您也可以回答。我的另一个问题是关于打盹模式。我在android中有一项服务,它会在手机锁定一段时间后自动停止。如何保持服务运行?谢谢
    • @TahirHussainMir 我没有与ServiceDoze Mode 合作过......无论如何,在 Stack Overflow 上发布问题会有人回答......
    猜你喜欢
    • 2021-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-28
    • 2013-02-21
    • 2018-11-12
    • 2014-01-18
    • 1970-01-01
    相关资源
    最近更新 更多