最近我必须制作一个应用程序来从设备读取文件,例如照片、视频、音乐等。当我想打开包含下载、图像、音乐或其他文件夹的文件夹时,我的程序无法读取它们。问题是我根本无法访问应用程序之外的任何文件,我不会收到任何错误,例如,如果我想打开“下载”文件夹,然后使用列表获取其中的文件列表() 方法,它返回 null
请帮我解决这个问题。
MainActivity.java
public class MainActivity extends AppCompatActivity {
//private TextView t;
private Button bt;
private File File;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
EdgeToEdge.enable(this);
setContentView(R.layout.activity_main);
ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main), (v, insets) -> {
Insets systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars());
v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom);
return insets;
});
bt = findViewById(R.id.button);
bt.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// val downloadFolder = requireContext().getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS
System.out.println("btn_click!");
// String path = Environment.getExternalStorageDirectory().toString();
// System.out.println(path);
// if (checkSelfPermission(Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
// ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, 0);
// }
File f = new File("sdcard");
String[] s = f.list();
File sdcard = Environment.getExternalStorageDirectory();
//Get the text file
File file = new File(String.valueOf(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS)));
String[] text = file.list();
//Read text from file
System.out.println(Arrays.toString(text));
}
// for(int i=0;i < f.length;i++){
// System.out.println(s[i]);
// }
});
}
}
manifect.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
<!-- <permission android:name="android.permission.ACCESS_SUPERUSER"-->
<!-- tools:ignore="ReservedSystemPermission" />-->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"
android:maxSdkVersion="28"
/>
<application
android:requestLegacyExternalStorage="true"
android:allowBackup="true"
android:dataExtractionRules="@xml/data_extraction_rules"
android:fullBackupContent="@xml/backup_rules"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.New_proj"
android:protectionLevel="normal"
>
<activity
android:name=".MainActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
Android 应用程序通常是沙盒的,这意味着任何应用程序只能访问自己的数据除非应用程序特别请求并由用户授予权限。
在您的清单中,您已经有以下行:
uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"
该行演示了您的应用如何访问设备上的 SD 卡。查看权限列表以了解您想要请求哪些权限,并根据需要在您的
uses-permission
中添加 manifest.xml
。