Android 允许用户在我的应用程序中选择图像,有时他们会选择错误的文件

Android 允许用户在我的应用程序中选择图像,有时他们会选择错误的文件,android,android-intent,android-activity,onactivityresult,Android,Android Intent,Android Activity,Onactivityresult,在我的应用程序期望在ActivityResult上显示一个图像,但收到类似.pdf的内容后,我的应用程序出现崩溃。我知道我的代码应该在崩溃之前进行检查,以确保传回的数据确实是图像,但我认为指定mime类型就足够了 我的代码: //显示弹出窗口 Intent intent = new Intent(); intent.setType("image/*"); intent.setAction(Intent.ACTION_GET_CONTENT); intent.addCategory(Intent.

在我的应用程序期望在ActivityResult上显示一个图像,但收到类似.pdf的内容后,我的应用程序出现崩溃。我知道我的代码应该在崩溃之前进行检查,以确保传回的数据确实是图像,但我认为指定mime类型就足够了

我的代码:

//显示弹出窗口

Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
intent.addCategory(Intent.CATEGORY_OPENABLE);

此代码使dropbox、gallery、Google Drive等显示为选项。但即使谷歌硬盘也允许你选择一个.pdf文件。我是否设置了错误的意图类型?我是否在允许有问题的应用程序允许用户选择pdf或其他文件类型时卡住了?

即使系统可以为您验证文件扩展名,您仍然需要验证来自用户的数据。如果[潜在恶意]用户只是简单地将.pdf更改为.jpg怎么办?

会发生这种情况。因此,您需要在onActivityResult中进行检查,从中获取图像URI,并检查扩展名,如.jpg、.png、.jpeg等。。。然后,只有您才能导入文件,否则将显示一个Toast或Dialog。

您需要记住,文件扩展名也不是权威的。@dcow那么如何才能保证它?请开导。我很想知道这一点。这取决于你对数据做了什么。