【发布时间】:2018-12-26 06:13:46
【问题描述】:
我创建了一个简单的应用程序,它尝试访问手机的外部存储文件并将其显示在警报框上,代码如下所示。
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 没有给出任何错误
我能做些什么来克服这个问题。
【问题讨论】:
-
你能给我们stacktrace吗?我确实认为这是因为您忘记了许可。
-
如果您的意思是读写外部存储的权限,那么我也添加了这些权限
android.permission.READ_EXTERNAL_STORAGE@SamiTahri -
给出错误的堆栈跟踪(当它在您的设备上崩溃时,而不是在模拟器上)。您是否接受了设备上的权限,因为您可能没有请求它们(在您的 Android 参数中的应用程序下检查)?
-
在 logcat 的左上角,下拉菜单设置为显示来自模拟器的数据。如果两台设备都在运行,您需要手动选择移动设备。
-
是的,这是@SamiTahri 的权限问题。我没有授予任何特定权限来读取外部存储。你能告诉我怎么做吗?