我正在开发一个应用程序,在此活动中按下一个按钮,可以选择上传任何文件。 文件选择器正确加载,但所有图像都是不可选择的(灰色)。我将READ_EXTERNAL_STORAGE权限添加到Manifest文件,但我不知道为什么它仍然不允许我选择文件。这是我正在使用的代码
private Button uploadButton;
private TextView uploadFile;
private static final int PICKFILE_RESULT_CODE = 1;
private String selectedImagePath;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
uploadButton = (Button)findViewById(R.id.upload_button);
uploadFile = (TextView)findViewById(R.id.uploadFile);
uploadButton.setOnClickListener(new View.OnClickListener()
{
public void onClick(View v){
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("file/*");
startActivityForResult(intent, PICKFILE_RESULT_CODE);
}});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
switch(requestCode){
case PICKFILE_RESULT_CODE:
if (resultCode==RESULT_OK){
String FilePath = data.getData().getPath();
uploadFile.setText(FilePath);
}
break;
}
}
答案 0 :(得分:10)
尝试按照Blundell的建议将类型设置为"*/*
。
如果您不希望用户能够选择任何类型的内容,则应在onActivityResult中记录文件的类型(this answer显示如何)。然后尝试几个有效文件,查看日志并相应地修改intent.setType
。您可以在this answer。
答案 1 :(得分:4)
Blundell在上面的评论中提到了它,但您也可以将以下内容添加到您的清单文件中。另外,尝试使用setType(“image /*).
<uses-permission android:name="android.permission.READ_INTERNAL_STORAGE" />
答案 2 :(得分:2)
当我尝试使用marshmellow时,以下代码有帮助。我试过用c#(xamarin)。多重哑剧类型是关键。希望这有助于某人
Intent intent = new Intent(Intent.ActionOpenDocument);
intent.SetType("file/*");
intent.AddCategory(Intent.CategoryOpenable);
String[] mimeTypes = { "text/csv", "text/comma-separated-values" ,"application/pdf","image/*"};
intent.PutExtra(Intent.ExtraMimeTypes, mimeTypes);
((FormsAppCompatActivity)Forms.Context).StartActivityForResult(intent, 7007);
答案 3 :(得分:0)
此代码适用于打开文本(* .txt)文件。如果您使用ACTION_GET_CONTENT,也可以从Google驱动器(或其他使用该意图的应用)中打开文件。如果使用ACTION_OPEN_DOCUMENT,则仅显示内部文件。其他文件类型显示为灰色。
请记住对清单文件具有适当的权限。
verifyStoragePermissions(ImportExportActivity.this);
String[] mimeTypes = { "text/plain"};
Intent intent = new Intent()
.putExtra(Intent.EXTRA_LOCAL_ONLY, true)
.putExtra(Intent.EXTRA_MIME_TYPES, mimeTypes)
.setType("file/*")
//.setAction(Intent.ACTION_OPEN_DOCUMENT);
.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(Intent.createChooser(intent, "Select a text file"), 123);
private static void verifyStoragePermissions(Activity activity) {
// Check if we have write permission
int permission = ActivityCompat.checkSelfPermission(activity, Manifest.permission.WRITE_EXTERNAL_STORAGE);
if (permission != PackageManager.PERMISSION_GRANTED) {
// We don't have permission so prompt the user
ActivityCompat.requestPermissions(
activity,
PERMISSIONS_STORAGE,
REQUEST_EXTERNAL_STORAGE
);
}
}