java - 当我尝试访问手机的外部存储器时应用程序崩溃
问题描述
我创建了一个简单的应用程序,它尝试访问手机的外部存储文件并将其显示在警报框上,代码如下所示。
btnShowDeviceFolders.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
CharSequence items[];
final List<String> list = new ArrayList<String>();
final File path =
Environment.getExternalStoragePublicDirectory
(
//Environment.DIRECTORY_PICTURES
Environment.DIRECTORY_DCIM
//File.separator +"/"
);
if(!path.exists())
{
//path.mkdirs();
System.out.println("No file found");
}
String[] files = path.list();
if (files.length == 0) {
//System.out.println("The directory is empty");
} else {
for (String aFile : files) {
//System.out.println(aFile);
list.add(aFile);
}
}
items = files;
AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
builder.setTitle("Select Project Folder");
builder.setItems(items, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int item) {
Toast.makeText(getApplicationContext(),list.get(item),Toast.LENGTH_LONG).show();
}
});
builder.show();
}
});
但是这段代码在模拟器上运行良好,它列出了存在的文件夹,但是当我apk
在我的手机上构建和测试它时它崩溃了(我正在使用 android Oreo 进行测试)。Stacktrace 没有给出任何错误
我能做些什么来克服这个问题。
解决方案
在 android_manifest.xml 文件中授予外部存储器的权限。
推荐阅读
- xamarin - Xamarin 不同的部署方法(即席、发布、调试等)
- assembly - 程序计数器保存当前地址还是下一条指令的地址?
- reactjs - 循环中的更新状态不起作用
- spring - 无法连接到运行 Junit 测试的 Redis
- arrays - 在另一个数组 SWIFT 4 中循环遍历数组和分组连续数字的最佳方法?
- r - 安装失败:似乎不是 R 包(没有说明
- .net - 使用 DataReceivedHandler 打开一个 VB 窗体
- laravel - Laravel Nova:使用 Passport 进行身份验证
- firebase - Firestore 规则路径不起作用
- xamarin - Cosmos DB - 无法从 Xamarin 中检索